Search Unity

  1. Unity 6 Preview is now available. To find out what's new, have a look at our Unity 6 Preview blog post.
    Dismiss Notice
  2. Unity is excited to announce that we will be collaborating with TheXPlace for a summer game jam from June 13 - June 19. Learn more.
    Dismiss Notice
  3. Dismiss Notice

Third Party [PHOTON] Getting NullReference when theres more players

Discussion in 'Multiplayer' started by Moddwyn, Dec 7, 2017.

  1. Moddwyn

    Moddwyn

    Joined:
    Jan 27, 2016
    Posts:
    49
    Code (CSharp):
    1. void Start(){
    2.         killFeedUI = GameObject.Find ("KillFeed");
    3.     }
    Code (CSharp):
    1. public void Die(){
    2.         GameObject[] players = GameObject.FindGameObjectsWithTag ("Player");
    3.         foreach(GameObject p in players){
    4.             p.GetComponent <PhotonView>().RPC("SendFeed", PhotonTargets.All, killersName);
    5.         }
    6.         PhotonNetwork.Destroy (gameObject);
    7.     }

    Code (CSharp):
    1. [PunRPC]
    2.     public void SendFeed(string killer){
    3.         GameObject newFeed = GameObject.Instantiate (feedPrefab);
    4.         newFeed.transform.SetParent (killFeedUI.transform);
    5.         newFeed.transform.GetChild (0).GetComponent <Text>().text = (killer + " killed " + GetComponent <PhotonView>().owner.NickName);
    6.         newFeed.transform.localScale = new Vector3 (1, 1, 1);
    7.     }
    In my code above, so bascially when I die, every player will instantiate a UI to their own canvas. Right now, when there's only one player in the room, the SendFeed gets called to that one player(me), everything works fine. But if there's 2 players, I get a nullreference on
    Code (CSharp):
    1. newFeed.transform.SetParent (killFeedUI.transform);
    and the the UI gets instantiated infinately. Why is this happening? Everything works fine with one player, why are there problems with multiple?
     
  2. tobiass

    tobiass

    Joined:
    Apr 7, 2009
    Posts:
    3,082
    Debug this some more. You can attach MD or VS to Unity and run this. Both should stop when the nullreference happens and you can look up what value is null. Then think about it why this might be the case.
    It's a game-logic issue more than a network issue.
     
    Moddwyn likes this.
  3. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,749
    It's difficult to say for certain going on the code supplied but you probably want to restrict the SendFeed() function to only run on the local player object.

    Try adding
    Code (CSharp):
    1.  if(!photonView.isMine) return;
    as the first line of your SendFeed() function. (you may want to change the SendFeed() script to inherit from Photon.PunBehaviour if it doesn't already, otherwise you won't have available the handy cached reference to the PhotonView component.
     
    Moddwyn likes this.