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

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

Похожие вопросы