【问题标题】:Multiplayer Game with players on separate versions of the same map多人游戏,玩家在同一地图的不同版本上
【发布时间】:2018-02-16 06:57:26
【问题描述】:

我正在制作/想要制作一个子弹地狱游戏,其中基本上有两个玩家,每个玩家都拥有自己相同的地图副本以获得高分。只要有玩家死亡,游戏就会结束。

我在多人游戏中完成了所有这些工作,但我的方法似乎有点老套,所以我想知道是否有更好的方法来完成这个。

起初我只使用了 unity 的网络管理器,在我的播放器 Start() 函数中,我检查了 if(!isLocal),如果是,我将启用的游戏对象设置为 false。这很好用,但就像我说的那样,感觉有点 hacky。

代码示例:

if (!isLocalPlayer) {
       gameObject.SetActive(false);
       return;
    }

接下来我转到了统一的 LobbyManager。这是事情变得非常棘手的地方。现在在主机上,游戏加载正常,但在客户端上,只创建了一个游戏对象,并且它被设置为禁用,这让我相信它是“敌人”或不是本地玩家对象。

我慢慢发现,造成这种情况的原因是将敌人的游戏对象 active 设置为 false。如果我让它成真,那么两个玩家都会在两个屏幕上生成。我现在的解决方案是不禁用敌方玩家对象,而是禁用其上的每个组件,以免妨碍它。

再一次,这让人感觉很老套,而且可能会导致未来出现问题。这真的是最好的选择,还是我遗漏了一些明显的东西?

代码示例:

if (!isLocalPlayer) {
    gameObject.GetComponent<MeshRenderer>().enabled = false;
    gameObject.GetComponent<BoxCollider>().enabled = false;
    gameObject.GetComponent<CharacterController>().enabled = false;
    gameObject.GetComponent<PlayerController>().enabled = false;
    gameObject.GetComponent<Rigidbody>().detectCollisions = false;
    guns = gameObject.GetComponentsInChildren<MeshRenderer>();
    foreach (MeshRenderer gun in guns) {
        gun.enabled = false;
    }

}

提前致谢!抱歉,这篇文章太长了,希望它不是一件苦差事。

【问题讨论】:

  • 如果地图很小,您可以将其复制到同一场景中,并在第二部分中生成第二个玩家。
  • 我已经考虑过这个问题,但我仍然觉得它很老套。另外,它使两个客户端都进行了不必要的渲染。不过,我想这是一个比我目前的解决方案更清洁的解决方案。

标签: c# unity3d multiplayer


【解决方案1】:

制作一个只有乐谱管理器和您需要转移的其他东西的空场景。

在您的项目文件夹中有另一个场景作为资产,这是地图所在的位置。

当玩家加入时,让他们与得分经理一起加入场景。

如果他们也是本地玩家,他们应该加载地图场景。

这样,两个玩家将在同一个场景中,同时拥有自己的地图实例。

您可以异步和附加地加载场景,这非常适合您的情况。

【讨论】:

  • 如果我使用这个解决方案,我是否仍然能够像我一直在做的那样通过我的 playercontroller 脚本从我的播放器对象进行命令和 RPC 调用,或者我需要重写我的所有要在分数管理器中的代码?
  • 您可以尝试在每个客户端加载后合并场景,这也可能有效,这是一个简单的实验,如果有效,可能会节省大量工作。如果这不起作用,您可以使用带有 scoremanager 的场景作为网络和本地客户端之间的接口。
  • 合并场景时,请记住在尝试合并之前确保已加载所有相关场景。编辑:要回答你的问题,我认为这取决于你如何让场景运行。我有一种感觉,Unity 天生不适合处理多人游戏中的多个活动场景,但你可以通过聪明的方法来规避这个问题。
  • 太棒了!我想我明白了。感谢您的所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多