Лобби сети ожидает загрузки всех сцен игроков
Я новичок в сети и немного застрял в сетевом лобби, моя проблема в том, что если я создаю и загружаю сцену, скажем, на 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" Снова, любая помощь или указание мне в правильном направлении будет с благодарностью.