public class ReadyPlayerChecker : NetworkBehaviour
{
public List<PlayerBehaviour> activePlayers;
public List<PlayerBehaviour> GetActivePlayers()
{
return activePlayers;
}
// Start is called before the first frame update
void Start()
{
activePlayers = new List<PlayerBehaviour>();
}
// Update is called once per frame
void Update()
{
foreach (PlayerBehaviour player in FindObjectsOfType<PlayerBehaviour>
(true))
{
if(!activePlayers.Contains(player))
{
activePlayers.Add(player);
}
}
bool allPlayersReady = true;
foreach (PlayerBehaviour player in activePlayers)
{
if (!player.IsReady())
{
allPlayersReady = false;
}
}
if (allPlayersReady && activePlayers.Count > 0)
{
OnAllPLayersReady();
}
}
[Command]
public void OnAllPLayersReady()
{
GameObject.Find("SceneManager").GetComponent<SceneChanger>
().LoadScene("SimpleArena");
}
4条答案
按热度按时间2hh7jdfx1#
连接到此服务器的客户端将自动切换到此场景。如果设置了onlineScene或offlineScene,则会自动调用此方法,但可以在游戏进行时从用户代码调用此方法以再次切换场景。此方法会自动将客户端设置为未就绪。客户端必须再次调用NetworkClient.Ready才能加入新场景。”
如果它不能解决问题,你能给予更多关于你的项目的信息吗?你正在使用MatchInterestManager吗?这可能会导致一些类似你的问题
编辑1 -也许问题是主机你能在服务器上运行你的代码而不是主机
编辑2 -我相信你的命令函数运行在客户端而不是服务器上,因为你在你的命令函数上缺少“Cmd”前缀,请更改它CmdOnAllPlayersReady()
bpzcxfmw2#
}
djmepvbi3#
这是我的网络管理器设置:
q35jwt9p4#
我成功地在场景切换时连接了播放器客户端。现在,我的客户端的播放器预制件在主机视图中,而不在对应的客户端视图中。有人能告诉我为什么吗?