Null Reference

Options
Shu
Shu
Hello All,

I am using Pun turn manager.
The problems always come randomly after the first game to be played. (The game runs smoothly when the application first startup)

Subsequently, my references to 1 of the game will object will "disappear". The game object reference that disappear is "waitpanel". I have little clue on why its happening. Can someone help out?

Thanks,
Below is more detailed information of the error and code. The errors only occurs when I attempted to change property of a game object in 1 of the IPunTurnManagerCallbacks functions.

MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
TikamPhase.TurnEnd (Int32 turn) (at Assets/Scripts/GameStates/TikamPhase.cs:31)
PhaseCallbackBase.OnTurnCompleted (Int32 turn) (at Assets/Scripts/GameStates/PhaseCallbackBase.cs:98)
PunTurnManager.OnEvent (Byte eventCode, System.Object content, Int32 senderId) (at Assets/Networking/Photon Unity Networking/UtilityScripts/PunTurnManager.cs:243)
NetworkingPeer.OnEvent (ExitGames.Client.Photon.EventData photonEvent) (at Assets/Networking/Photon Unity Networking/Plugins/PhotonNetwork/NetworkingPeer.cs:2595)
ExitGames.Client.Photon.PeerBase.DeserializeMessageAndCallback (System.Byte[] inBuff)
ExitGames.Client.Photon.EnetPeer.DispatchIncomingCommands ()
ExitGames.Client.Photon.PhotonPeer.DispatchIncomingCommands ()
PhotonHandler.Update () (at Assets/Networking/Photon Unity Networking/Plugins/PhotonNetwork/PhotonHandler.cs:157)
Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TikamPhase : PhaseCallbackBase
{
    public GameObject waitPanel;
    // Use this for initialization instead of void start
    protected override void Setup()
    {

    }


    /// <summary>
	/// Called the turn begins event.
	/// </summary>
	/// <param name="turn">Turn Index</param>
    public override void TurnBegins(int turn)
    {
        GameManager.instance.spawnedTikam.ScenarioPhase();
    }

    /// <summary>
    /// Called when a turn is completed (finished by all players)
    /// </summary>
    /// <param name="turn">Turn Index</param>
    public override void TurnEnd(int turn)
    {
        waitPanel.SetActive(false);
        PhaseManager.instance.ChangePhases(Phases.Choosing);
    }

    /// <summary>
    /// Called when a player moved (but did not finish the turn)
    /// </summary>
    /// <param name="player">Player reference</param>
    /// <param name="turn">Turn Index</param>
    /// <param name="move">Move Object data</param>
    public override void OnPlayerMove(PhotonPlayer player, int turn, object move)
    {
    //    int check = int.Parse(move.ToString()[0].ToString());
    //    int val = int.Parse(move.ToString()[1].ToString());
        byte[] data = (byte[])move;
        byte check = data[0];
        byte val = data[1];

        switch (check)
        {
            case 0:
                GameManager.instance.spawnedTikam.chosenScenario = val;
                GameManager.instance.spawnedTikam.StartCoroutine("DisplayScenario");
                break;
            default:
                break;
        }
    }

    /// <summary>
    /// When a player finishes a turn (includes the action/move of that player)
    /// </summary>
    /// <param name="player">Player reference</param>
    /// <param name="turn">Turn index</param>
    /// <param name="move">Move Object data</param>
    public override void OnPlayerFinished(PhotonPlayer player, int turn, object move)
    {
        if(GameManager.instance.myPlayer.networkPlayer == player)
            waitPanel.SetActive(true);
    }

}