Я пытаюсь понять архитектуру Photon Pun. Я не могу вызвать обратный вызов OnPhotonSerializeView()
в 'IPunObservable
'.
Что у меня есть в моей сцене
GameObject
по имениDataHandler
на вершине иерархииDataHandler
имеет прикрепленныеPhotonView
иPhotonTransformView
DataHandler
также имеет прикрепленный скрипт под названиемDataHandler
Скриптовый компонент
DataHandler
был перетащен на первый наблюдаемый объект в компоненте PhotonView (поэтому он показывает 'DataHandler (DataHandler)
' как наблюдаемый компонент).Сценарий DataHandler реализует
IPunObservable
, и единственным методом в нем являетсяpublic class DataHandler : MonoBehaviourPunCallbacks, IPunObservable { .... public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { Debug.Log("OnPhotonSerializeView(): " + (stream.IsWriting ? "writing" : "reading")); } .... }
В журнале при запуске ничего не отображается.
Однако при сборке и запуске как EXE-файла Windows, подключенного к помещению, возникают NullReferenceExceptions. Журнал показывает:
NullReferenceException: Object reference not set to an instance of an object
at Photon.Pun.PhotonView.SerializeComponent (UnityEngine.Component component, Photon.Pun.PhotonStream stream, Photon.Pun.PhotonMessageInfo info) [0x0001e] in C:\Users\nick\Documents\Unity3D\PhotonPunTest\Assets\Photon\PhotonUnityNetworking\Code\PhotonView.cs:368
at Photon.Pun.PhotonView.SerializeView (Photon.Pun.PhotonStream stream, Photon.Pun.PhotonMessageInfo info) [0x00024] in C:\Users\nick\Documents\Unity3D\PhotonPunTest\Assets\Photon\PhotonUnityNetworking\Code\PhotonView.cs:330
at Photon.Pun.PhotonNetwork.OnSerializeWrite (Photon.Pun.PhotonView view) [0x00089] in C:\Users\nick\Documents\Unity3D\PhotonPunTest\Assets\Photon\PhotonUnityNetworking\Code\PhotonNetworkPart.cs:1593
at Photon.Pun.PhotonNetwork.RunViewUpdate () [0x000b3] in C:\Users\nick\Documents\Unity3D\PhotonPunTest\Assets\Photon\PhotonUnityNetworking\Code\PhotonNetworkPart.cs:1522
at Photon.Pun.PhotonHandler.LateUpdate () [0x00042] in C:\Users\nick\Documents\Unity3D\PhotonPunTest\Assets\Photon\PhotonUnityNetworking\Code\PhotonHandler.cs:155
(Filename: C:/Users/nick/Documents/Unity3D/PhotonPunTest/Assets/Photon/PhotonUnityNetworking/Code/PhotonView.cs Line: 368)
и код вокруг строки 368 в PhotonView.cs
protected internal void SerializeComponent(Component component, PhotonStream stream, PhotonMessageInfo info)
{
IPunObservable observable = component as IPunObservable;
if (observable != null)
{
observable.OnPhotonSerializeView(stream, info);
}
else
{
Debug.LogError("Observed scripts have to implement IPunObservable. "+ component + " does not. It is Type: " + component.GetType(), component.gameObject);
}
}
(строка Debug.LogError
равна 368).
Не вижу, что не так, хотя я предполагаю, что component
, вероятно, null
. Сценарий реализует IPunObservable
. Кто-нибудь может помочь?
component
этоnull
... - person derHugo   schedule 24.06.2020