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 + "$";
}
}
Какой я получаю результат
- В игру заходит первый игрок, создается объект "PlayerTextList", содержащий никнейм игрока, всё работает
- Заходит второй игрок, создается ещё один объект "PlayerTextList", но на месте переменной Player - пропуск, то есть присвоить переменную не получилось, естественно его никнейм не отображается корректно и консоль выдает ошибку
NullReferenceException: Object reference not set to an instance of an object
В чём я мог допустить ошибку и как реализовать показ списка игроков в комнате более правильно?