Объекты являются нулевыми, когда они должны быть заполнены, и единственная причина кажется произвольной

Я немного новичок в 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 мне для получения дополнительной информации

0 ответов

Другие вопросы по тегам