多人游戏,玩家在同一张地图的不同版本上

Multiplayer Game with players on separate versions of the same map

我 making/want 制作一个子弹地狱游戏,其中基本上有两个玩家,每个玩家都拥有自己的相同地图副本以争夺高分。每当玩家死亡时游戏就会结束。

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

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

代码示例:

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

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

我慢慢想通了,原因是将敌人的游戏对象设置为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;
    }

}

提前致谢!抱歉,这篇太长了,希望阅读起来不是一件苦差事。

创建一个空场景,只包含一个乐谱管理器和您需要传输的其他内容。

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

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

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

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

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