我有点被困在这里该怎么办了。我没有得到任何帮助,从不和谐服务器,所以我转到这里,希望有人对我有一些洞察力。
背景:
这就是我想要达到的目标。我希望有一个server+client主机(使用Unity ),但允许所有客户端在场景之间来回移动。这个概念看起来很简单,但我还没有找到一个好的解决方案。请注意,我有服务器调节设置的球员移动。
我尝试过的:
每次客户想去一个新的场景时,他都会向服务器发送一个请求。服务器将额外加载场景,并将RPC发送回客户端,客户端也将额外加载场景。然后场景已经成功加载,无论是客户端还是服务器,它都将调用MoveObjects命令(在SceneManager上)将播放机字符移动到新场景。所以这意味着和解应该还是可以的。如果您不是服务器,那么卸载旧场景。如果您是服务器,那么当场景中仍然有客户端时,保持所有场景的附加加载。
我上述方法的唯一问题是,我不能禁用/隐藏服务器上的场景(或者至少我还不知道如何做到这一点)。
我的请求
这是最好的办法吗?有免费的代码示例我可以看吗?可以解释更好的方法的教程吗?还有其他人用更好的方法做这件事吗?我真的很感激能在这件事上得到任何帮助。
最后的想法
我想的最后一件事是如何动态地启动一个新的服务器,并在每一个新的统一场景中连接到新的服务器,从而分离玩家。这种方法唯一的问题是它破坏了跨场景的通信。比如,如果我想展示玩家所在的场景,以及他们当前的健康状况,那么在多个场景的派对上,所有的玩家都会看到他们的健康状况。
发布于 2020-12-23 03:21:27
这有点复杂。然而,我做到了以下几点:
NetworkClient.Send(new ClientRequestLoadScene() { sceneName = sceneName, travelPoint = travelPoint }); 服务器上的
conn.Send(new SceneMessage() { sceneName = msg.sceneName, sceneOperation = SceneOperation.LoadAdditive });当服务器加载完该场景时,
SceneManager.MoveGameObjectToScene(character, SceneManager.GetSceneByName(GetCleanedSceneName(msg.sceneName)));只有在特定的scene
NetworkSceneChecker具有可见性,如果场景中加载了3d物理,则包含PhysicsSimulator组件。现在,这并没有给出关于如何做到这一点的每一个微小的细节,但这是一个很好的起点,可以理解您如何能够做到这一点。主要有以下几个方面:
客户端将不会自己加载场景,除非他们从server
<代码>F 234
https://stackoverflow.com/questions/65269591
复制相似问题