Как передать значение в объект, созданный через Photon Unity Network?

Скрипт для мультиплеера, который создает экземпляры игроков.
Объект мастер-клиента получает ID, который генерируется случайным образом.
Объектам остальных клиентов их ID не доходят - пробовал напрямую, через функую с атрибутом [PunRPC], а так же через ее аргумент.

using UnityEngine;
using Photon.Pun;
using System.IO;

public class PhotonPlayer : MonoBehaviourPun
{
    public PhotonView PV;
    public int playerID;
    public GameObject myUnit;
    
    public void Start()
    {
        PV = GetComponent<PhotonView>();
        playerID = Random.Range(0, GameSetUp.GS.spawnPoints.Length);

        if (PV.IsMine)
        {
            myUnit = PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs", "UnitAvatar"),
            GameSetUp.GS.spawnPoints[playerID].position,
            GameSetUp.GS.spawnPoints[playerID].rotation, 0);

            PV.RPC("RPC_ID", RpcTarget.AllBuffered, playerID);

            //myUnit.GetComponent<UnitSetup>().playerID = playerID;
            //myUnit.tag = "Player" + playerID;
        }
    }

    [PunRPC]
    public void RPC_ID(int ID)
    {
        myUnit.GetComponent<UnitSetup>().playerID = ID;
        myUnit.tag = "Player" + ID;
    }

//версия без аргумента
    /*
    [PunRPC]
    public void RPC_ID()
    {
        myUnit.GetComponent<UnitSetup>().playerID = playerID;
        myUnit.tag = "Player" + playerID;
    }
*/
}


На объектах находится PhotonViewer, объекты синхронизированы друг с другом, проблем с управлением не наблюдается.
Необходима лишь передача индивидуальных номеров и тегов, которая по каким-то причинам не происходит.
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
pr9niks
@pr9niks Автор вопроса
Наконец решил) Вызвал ID у PhotonViev созданного объекта myUnit.GetComponent().ViewID и просто перенес его в аргумент функции с сетевым атрибутом, таргетированным на всех (в моем случае с буферизацией). Там нашел созданный объект по его Photon Viev ID и создал его экземпляр: GameObject unit = PhotonView.Find(ID).gameObject;
Дальше можно присваивать экземпляру любые переменные из скрипта локального клиента. Изменения будут видеть все клиенты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы