Как создавать и управлять количеством элементов на карте в Photon Network (Pun2) - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь случайным образом сгенерировать такие предметы, как звезда, сердце, алмаз, монета ... на карте с параметром - максимальное количество предметов в одной комнате. В своем методе я использовал главный клиент (PhotonNetwork.IsMasterClient) комнаты для запуска функции генерации элементов. Только главный клиент создает и управляет количеством элементов на карте. если главный клиент покидает игру, то другой игрок назначается главным клиентом с использованием метода OnMasterClientSwitched() и продолжает генерировать и управлять количеством элементов.

Однако проблема заключается в том, когда главный клиент покидает игру, Я не могу передать параметр - ItemNumber, то есть подсчитывать количество элементов на карте, новому главному клиенту. И всегда начинается с 0. Знаете ли вы, как передать параметр от главного клиента к новому главному клиенту, когда он покидает игру? Или каким-либо способом создавать и управлять количеством элементов на карте в одной комнате? Это мой код:

void Update()
{   
    if (photonView.IsMine && PhotonNetwork.IsMasterClient)
    {
        StartCoroutine(spawnRandomItems());
        spawnWait = Random.Range(spawnLeastWait, spawnMostWait);
    }
}
private IEnumerator spawnRandomItems()
{
    yield return new WaitForSeconds(startWait);
    while (ItemNumber < maxItemNumber)
    {
        int randItemType = Random.Range(0, 4);

        Vector3 spawnPosition = new Vector3(Random.Range(-17f, 17f), 1f, Random.Range(-17f, 17f));
        Quaternion spawnRotation = Quaternion.Euler(-90, 0, 0);
        PhotonNetwork.InstantiateSceneObject(spawnItemObjects[randItemType].name, spawnPosition, spawnRotation);
        ItemNumber++;

        yield return new WaitForSeconds(spawnWait);
    }
}

Я тоже использовал OnPhotonSerializeView (), но он тоже не работал.

 public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if (stream.IsWriting)
    {
        stream.SendNext(ItemNumber);
    }
    else if (stream.IsReading)
    {
        ItemNumber = (int)stream.ReceiveNext();
    }
}

Большое спасибо !!!!!

...