unity3d Unity -镜像网络:场景更改后,播放机客户端断开连接

zbsbpyhn  于 2022-11-16  发布在  其他
关注(0)|答案(4)|浏览(430)

我目前正在使用镜像网络制作一个多人游戏。我有一个场景,当玩家都连接在一起时,他们可以选择他们的角色并设置准备。如果所有玩家都准备好了,我会使用MyNetworkManager将当前场景更改为竞技场场景。ServerChangeScene(arenaSceneName)。此方法将所有播放器客户端设置为未就绪。但在加载场景后,我的播放器客户端不再连接到我的主机,我不知道为什么。
你能帮帮我吗?
非常感谢您的回答。

2hh7jdfx

2hh7jdfx1#

连接到此服务器的客户端将自动切换到此场景。如果设置了onlineScene或offlineScene,则会自动调用此方法,但可以在游戏进行时从用户代码调用此方法以再次切换场景。此方法会自动将客户端设置为未就绪。客户端必须再次调用NetworkClient.Ready才能加入新场景。”
如果它不能解决问题,你能给予更多关于你的项目的信息吗?你正在使用MatchInterestManager吗?这可能会导致一些类似你的问题
编辑1 -也许问题是主机你能在服务器上运行你的代码而不是主机
编辑2 -我相信你的命令函数运行在客户端而不是服务器上,因为你在你的命令函数上缺少“Cmd”前缀,请更改它CmdOnAllPlayersReady()

bpzcxfmw

bpzcxfmw2#

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");
 }

}

djmepvbi

djmepvbi3#

这是我的网络管理器设置:

q35jwt9p

q35jwt9p4#

我成功地在场景切换时连接了播放器客户端。现在,我的客户端的播放器预制件在主机视图中,而不在对应的客户端视图中。有人能告诉我为什么吗?

相关问题