多人游戏,玩家在同一张地图的不同版本上
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;
}
}
提前致谢!抱歉,这篇太长了,希望阅读起来不是一件苦差事。
创建一个空场景,只包含一个乐谱管理器和您需要传输的其他内容。
将另一个场景作为项目文件夹中的资产,这就是地图所在的位置。
当玩家加入时,让他们与得分管理器一起加入场景。
如果他们也是本地玩家,他们应该加载地图场景。
这样,两个玩家将在同一个场景中同时拥有自己的地图实例。
您可以异步和附加加载场景,这将非常适合您的情况。
我 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;
}
}
提前致谢!抱歉,这篇太长了,希望阅读起来不是一件苦差事。
创建一个空场景,只包含一个乐谱管理器和您需要传输的其他内容。
将另一个场景作为项目文件夹中的资产,这就是地图所在的位置。
当玩家加入时,让他们与得分管理器一起加入场景。
如果他们也是本地玩家,他们应该加载地图场景。
这样,两个玩家将在同一个场景中同时拥有自己的地图实例。
您可以异步和附加加载场景,这将非常适合您的情况。