Войти
ПрограммированиеФорумИгровая логика и ИИ

Unity Engine Работа с PUN 2 (PhotonNetwork)

#0
19:39, 9 авг. 2019

Здравствуйте столкнулся с такой проблемой, когда нужно показать, кто какого персонажа выбрал.
К примеру один игрок выбирает первого персонажа, другой четвёртого и т.д
При подключении к лобии персонажи, которые выбрали игроки должны отобразиться у всех. Но у меня почему-то отображаются персонажи, те которые выбрал Host комнаты. Т.е Host выбрал персонажа создал комнату к нему подключается другой игрок с другим персонажем ,но в результате в лобби стоят персонажи ,те которые выбрал Host. Помогите исправить, или подскажите как сделать правильно.

Приведу код ,который я написал:

public override void OnPlayerEnteredRoom(Player newPlayer)
    {
        PlayerCountUpdate();
        myPhotonView.RPC("SpawnPlayerAndNickNameUpAndColor", RpcTarget.AllBuffered, GameObject.Find(SaveNickNameObject).GetComponent<PrefabNickName>().i);
        if (PhotonNetwork.IsMasterClient)
            myPhotonView.RPC("RPC_SendTimer", RpcTarget.Others, timerToStartGame);
    }
Этот кусок срабатывает при входе игрока в комнату и передаёт из объёкта SaveNickNameObject id выбранного персонажа. Сам объект находиться при помощи GameObject.Find из константого значения const string SaveNickNameObject = "SaveNickNameObject";

[PunRPC]
   private void SpawnPlayerAndNickNameUpAndColor(int PersonOn)
    {
        for (int k = 0; k < playerCountCurrent; k++)
        {
            PlayersNickName[k].gameObject.SetActive(true);
            if (k != 0)
                PlayersNickName[k].text = GameObject.Find(SaveNickNameObject).GetComponent<PrefabNickName>().NickName;
            else if(PhotonNetwork.IsMasterClient)
                PlayersNickName[0].text = "Хост " + GameObject.Find(SaveNickNameObject).GetComponent<PrefabNickName>().NickName;

            PlayersNickName[k].GetComponent<Outline>().effectColor = GameObject.Find(SaveNickNameObject).GetComponent<PrefabNickName>().NickNameColor;

            for (int j = 0; j < CustomSkinsAll; j++)
            {
                if (j == PersonOn)
                    PlayersNickName[k].transform.GetChild(PersonOn).gameObject.SetActive(true);
                else
                {
                    if (j != PersonOn)
                        PlayersNickName[k].transform.GetChild(j).gameObject.SetActive(false);
                }
            }
        }
             
    }
Этот код и занимается отображением персонажей в лобби их ников, а также цветов ников
В начале подсвечивается количество мест т.е сколько игроков сейчас в комнате столько и персонажей будем рисовать.
Далее разбираем с правильным отображением ников если k != 0 значит это обычный игрок просто рисуем ник над его головой иначе это хост рисуем ник + Хост над головой хоста. и далее у всех преукрашиваем ники цветом Outline из того же объекта SaveNickNameObject.
И в конце концов уже отображаем самих персонажей из списка GetChild так как они у меня в иерархии стоят в объектах PlayersNickName я отображаю ,только того, кого выбрал игрок и вырубаю остальных ,чтобы не было двух персонажей на одном месте.

Я думаю проблема в передачи объекта SaveNickNameObject значения выбраного персонажа
ведь его передаёт локальный игрок всякий раз когда кто-то подключается к комнате. А не тот игрок который выбирает персонажа. Вот в этом может и загвоздка может кто-нить помочь разобраться с этой проблемой? Спасибо!


#1
20:24, 9 авг. 2019

Нормальный такой код, может лучше книги писать? нормально так символы накидываешь

#2
11:59, 10 авг. 2019

Извините не хочу показаться наивным ,но это мою проблему ни как не решит.

#3
15:54, 10 авг. 2019

KsiJasnon
> "Хост "

Писать на русском хост, мда, помойму уже даже младенец знает как пишется и смысл это слова на английском.

ПрограммированиеФорумИгровая логика и ИИ

Тема закрыта.