Объекты являются нулевыми, когда они должны быть заполнены, и единственная причина кажется произвольной
Я немного новичок в PUN и Unity, так что, надеюсь, я делаю какую-то ошибку новичка.
void Update(){
if(launch == true){
Debug.Log("launched");
myPhotonView.RPC("ChangeScene", PhotonTargets.All);
}
//myPhotonView.RPC("ChangeScene", PhotonTargets.All);
}
Когда я запускаю приведенный выше код, я вижу запущенный в консоли, но я получаю
"NullReferenceException: ссылка на объект не установлена для экземпляра объекта" в этой строке: myPhotonView.RPC("ChangeScene", PhotonTargets.All);
Когда я запускаю его с закомментированной строкой и строкой, которая находится вне оператора if, без комментариев, исключение нулевой ссылки не выполняется, и метод выполняется. Есть ли ошибка в приведенном выше коде, или это ошибка в Фотоне?
Любая помощь очень ценится. Я могу опубликовать полный код или сообщения об ошибках, если кто-то считает это необходимым.
Кроме того, это менее важно, но myPhotonView является нулевым во всех создаваемых мной методах, которые не являются обычными методами MonoBehaviour, такими как Start или Update, даже если я установил его как глобальную переменную и заполнил его в Start, прежде чем пытаться получить к нему доступ. Кажется, это может быть связано с другими проблемами, с которыми я сталкиваюсь, и это единственная причина, по которой я использую Обновление для этого.
Изменить: вот весь файл:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class NetworkedPlayer : Photon.MonoBehaviour{
public GameObject avatar;
public PhotonView myPhotonView;
public bool launch = false;
public string destination = "";
//Responsible for avatar movements on the plane
public Transform playerGlobal;
//Responsible for headmovements
public Transform playerLocal;
public Transform playerRotation;
void Start (){
//launch is successfuly set to false
//if(!launch) Debug.LogError("banana");
Debug.Log("Instantiated");
//Necessary for photon voive to work
var temp1 = PhotonVoiceNetwork.Client;
myPhotonView = this.photonView;
//this ensures that only you can control your player
if (photonView.isMine){
Debug.Log("Controlling my avatar");
playerGlobal = GameObject.Find("OVRPlayerController").transform;
playerLocal = playerGlobal.Find("OVRCameraRig/TrackingSpace/CenterEyeAnchor/Pivot");
playerRotation = playerGlobal.Find("OVRCameraRig/TrackingSpace/CenterEyeAnchor");
this.transform.SetParent(playerLocal);
this.transform.localPosition = Vector3.zero;
this.transform.rotation = playerRotation.transform.rotation;
// avatar.SetActive(false);
//Throws null
//GetComponent<PhotonVoiceRecorder> ().enabled = true;
}
}
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info){
//This sends your data to the other players in the same room
if (stream.isWriting){
stream.SendNext(playerGlobal.position);
stream.SendNext(playerGlobal.rotation);
stream.SendNext(playerLocal.localPosition);
stream.SendNext(playerLocal.localRotation);
}
//This recieves information from other players in the same room
else{
this.transform.position = (Vector3)stream.ReceiveNext();
this.transform.rotation = (Quaternion)stream.ReceiveNext();
avatar.transform.localPosition = (Vector3)stream.ReceiveNext();
avatar.transform.localRotation = (Quaternion)stream.ReceiveNext();
}
}
public void ChangeAndSyncScene(string dest){
Debug.LogError("Dest selected: " + dest);
launch = true;
destination = dest;
Update();
}
void Update(){
if(launch == true){
Debug.LogError("launched");
myPhotonView.RPC("ChangeScene", PhotonTargets.All);
ChangeScene();
}
myPhotonView.RPC("ChangeScene", PhotonTargets.All);
}
[PunRPC]
void ChangeScene(){
Debug.LogError("scene changed");
Application.LoadLevel (destination);
}
}
Редактировать: мне так и не удалось это исправить, но я все обошел. Я создал игровые объекты, чтобы дать значения другим игрокам в игре. PM мне для получения дополнительной информации