Прежде всего: я действительно не эксперт по Photon, поэтому я должен доверять своим возможностям Google: P
В общем: убедитесь, что GameObject
с вашим компонентом на самом деле список PhotonView
"Наблюдение", иначе он вообще не будет вызываться OnPhotonSerializeView
.
Я бы предположил: массив является ссылочным типом. Photon, вероятно, не выполняет итерацию по всему массиву все время, чтобы отслеживать какие-либо изменения, а только проверяет, изменилась ли сама ссылка.
В качестве альтернативы вы можете, однако, через некоторое время после изменения просто вручную отправить массив, например,
public bool[] myBools;
...
photonView.RPC("SetArrayRPC", PhotonTargets.All, (object)myBools);
...
[PunRPC]
private void SetArrayRPC(bool[] array)
{
myBools = array;
}
Но на самом деле это тоже должно быть сделано
public class Example : Photon.MonoBehaviour
{
public bool[] myBools = new bool[5];
// Hit "Test" in the context menu in order to invert all values
// Then everywhere you should see in the Inspector the updated array
[ContextMenu(nameof(Test))]
private void Test()
{
for(var i = 0; i < myBools.Length; i++)
{
myBools[i] = !myBools[i];
}
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
{
// We own this player: send the others our data
stream.SendNext(myBools);
}
else
{
// Network player, receive data
myBools = (bool[])stream.ReceiveNext();
}
}
}