我是网络的菜鸟,并且对网络游说有点停滞,我的问题是,如果服务器上最快的服务器在3个设备上构建并加载场景,则该场景将加载并实例化播放器。场景,而其他2个场景可以比加载晚4秒钟,然后他们加载场景并将播放器实例化到场景中。
我想做的是在启动时获取玩家的状态,并将其添加到bool的'playersReady'false列表中,并在每个准备就绪时将其bool设置为true,并且只有当所有true时才将服务器设置为将玩家实例化到场景中。
我跳到LobbyManager.cs并添加了以下代码,以获取已连接玩家的数量及其设置为false的“ playersReady”状态。
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;
}
我很困惑该怎么做,我已经搜索了好几天了,没有找到可接受的方式,是否可以访问服务器代码以添加一会儿循环检查玩家的准备名单,直到所有设置为true,然后让服务器发送消息以加载其场景?如果我通过按键设置布尔值为true来使用此测试代码
public override void OnClientSceneChanged(NetworkConnection conn)
{
StartCoroutine(Waiting(conn));
}
public IEnumerator Waiting (NetworkConnection conn)
{
while (waiting)
{
yield return null;
}
base.OnClientSceneChanged(conn);
}
将一直保留在大厅屏幕上,直到按下“ w”并将其设置为“ waiting”为false,但场景仍已加载并且播放器已实例化到场景中,我只想停止发送消息以加载其场景,直到按下“ w”键,再次感谢您的帮助或向我指出正确的方向。