Photon PUN: Присвоение переменной при создании объекта через PhotonNetwork.Instantiate

Имеется скрипт GameManager, который создаёт игроков и добавляет их никнеймы в общий список

Пытаюсь сделать - при создании игрока в общий список всех игроков добавляется объект с компонентом Text, содержащий никнейм зашедшего игрока

Как я пытался это реализовать

//Скрипт, создающий игрока и добавляющий его никнейм в общий список игроков
    using UnityEngine;
    
    public class GameManager : MonoBehaviour
    {
        [Header("Player Prefab")]
        public GameObject PlayerPrefab;
    
        [Header("Multiplayer")]
        [SerializeField] private PhotonView photonView;
        [SerializeField] private GameObject PlayerTextList;
    
    
        private void Awake()
        {
            SpawnPlayer();
        }
    
    
        public void SpawnPlayer()
        {
            //Спавн игрока
            float randomValue = Random.Range(-1f, 1f);
            GameObject _p = PhotonNetwork.Instantiate(PlayerPrefab.name, new Vector2(this.transform.position.x * randomValue, this.transform.position.y), Quaternion.identity, 0);
    
            //Добавление игрока в общий список игроков
            GameObject Prefab = PhotonNetwork.Instantiate(PlayerTextList.name, transform.position, Quaternion.identity, 0);
            Prefab.GetComponent<ChangeValue>().player = _p.GetComponent<Player>();
        }
    }

Скрипт объекта с никнеймом игрока

//Скрипт объекта с никнеймом игрока
using UnityEngine;
using UnityEngine.UI;

public class ChangeValue : MonoBehaviour
{
    [Header("Multiplayer")]
    [SerializeField] private PhotonView photonView;
    public Player player;

    [Header("Player List")]
    private GameObject PlayerList;
    private Transform Content;


    private void Start()
    {
        //Список игроков
        PlayerList = GameObject.Find("Player List");
        Content = PlayerList.gameObject.transform.GetChild(0);

        //Изменение позиции
        this.transform.SetParent(Content.transform);
    }


    public void Update()
    {
        //Показ никнейма игрока
            gameObject.GetComponent<Text>().text = player.UserName;
            if (photonView) photonView.RPC("SetTextPUN", PhotonTargets.All, player.UserName, player.Money);
    }

    //Синхронизация никнеймов у игроков
    [PunRPC]
    public void SetTextPUN(string _n, int _m)
    {
        this.GetComponent<Text>().text = _n + " - " + _m + "$";
    }
}

Какой я получаю результат

  1. В игру заходит первый игрок, создается объект "PlayerTextList", содержащий никнейм игрока, всё работает
  2. Заходит второй игрок, создается ещё один объект "PlayerTextList", но на месте переменной Player - пропуск, то есть присвоить переменную не получилось, естественно его никнейм не отображается корректно и консоль выдает ошибку

NullReferenceException: Object reference not set to an instance of an object

В чём я мог допустить ошибку и как реализовать показ списка игроков в комнате более правильно?


Ответы (0 шт):