Лобби сети ожидает загрузки всех сцен игроков

Я новичок в сети и немного застрял в сетевом лобби, моя проблема в том, что если я создаю и загружаю сцену, скажем, на 3-х устройствах, если серверное - самое быстрое, он загружает сцену и создает экземпляр проигрывателя в сцене, пока другие 2 могут быть еще на 4 секунды после загрузки, затем они загружают свои сцены, и игрок попадает на сцену.

То, что я пытаюсь сделать, это получить состояние игроков при запуске и добавить его в список ложных 'PlayersReady' в bool, и, когда каждый из них готов, установить для их bool значение true, и только когда все они верны, заставить сервер создавать экземпляры игроков. на сцену.

Я запрыгнул в LobbyManager.cs и добавил приведенный ниже код, чтобы получить количество подключенных игроков и их состояние PlayersReady, которое установлено в false.

public int playerCount;
public List<bool> playersReady = new List<bool>();

public override void OnServerConnect(NetworkConnection conn)
{
    playerCount = 0;
    StartCoroutine(playerReadyScript.PlayerCount(0));
    foreach (NetworkConnection con in NetworkServer.connections)
    {
        if (con != null)
        {
            playerCount++;
        }
    }
    base.OnServerConnect(conn);
}

public override void OnClientNotReady(NetworkConnection conn)
{
    playersReady[playerCount-1] = false;
    base.OnClientNotReady(conn);
}

Затем, когда игрок готов, я использую это, чтобы установить PlayersReady в true.

public override void OnClientSceneChanged(NetworkConnection conn)
{
    playersReady[playerCount-1] = true;
}

Я очень запутался, как это сделать, я в течение нескольких дней гуглял, не находя приемлемого способа сделать это, нет ли доступа к коду сервера, чтобы добавить цикл while, проверяющий список PlayersReady List, пока все не будет установлено в true, тогда позволить серверу отправить сообщение для загрузки их сцены? если я использую этот тестовый код, установив bool true с помощью нажатия клавиши

public override void OnClientSceneChanged(NetworkConnection conn)
{
    StartCoroutine(Waiting(conn));
}

public IEnumerator Waiting (NetworkConnection conn)
{
    while (waiting)
    {
         yield return null;
    }
    base.OnClientSceneChanged(conn);
}

который будет удерживаться на экране лобби до тех пор, пока не будет нажата кнопка "w", установив "ожидание" в ложное положение, но сцена все еще загружена, и игрок будет создан на сцене, я просто хочу остановить отправку сообщения, чтобы загрузить их сцену, пока "w" Снова, любая помощь или указание мне в правильном направлении будет с благодарностью.

0 ответов

Другие вопросы по тегам