多人游戏统一

Posted

技术标签:

【中文标题】多人游戏统一【英文标题】:Multiplayer game in unity 【发布时间】:2021-11-26 18:37:05 【问题描述】:

在如图所示的 OnNetworkSpawn 方法中,我们为什么要检查实例的所有者,因为每个连接到服务器的客户端都将运行自己的脚本并且永远是他的所有者在服务器上拥有自己的实例(对吗?),但如果我删除此语句然后运行游戏,则在一个客户端上输入会移动所有连接的客户端。

编辑:- 我是 Stack Overflow 的新手,不善于提问,所以请告诉我是否应该详细说明:-)

【问题讨论】:

欢迎来到***。如果您不知道如何提问,请在How To Ask 阅读相关内容。第一件事:不要将代码发布为图像,将其作为代码块中的文本发布。这样,看不到图像的用户可以阅读它,并且可以复制您的代码以发布答案。 谢谢@ChrᴉzremembersMonica。会记住你说的一切:) 【参考方案1】:

所以基本上 if(IsOwner) 语句所做的是检查客户端是否是他自己的播放器的所有者,如果你不包括它不会检查客户端拥有的播放器所以它移动所有这些。如果您确实包含该语句,它将检查客户端拥有的玩家并仅移动该玩家。

【讨论】:

但是为什么我们必须检查所有权,因为每个客户端都在运行自己的脚本,所以他始终是自己的播放器对象的所有者.. 不是吗? 不,如果您不运行 if 语句检查,它将假定它拥有所有播放器对象,因为客户端在技术上运行每个脚本 好吧,举个例子,服务器上有2个客户端。两者都将运行自己的脚本,并且对于它们中的每一个,它们将永远是所有者,现在让我们假设if(IsOwner) check 不存在并且我们在更新循环中有一个简单的移动方法。现在如果我是客户端 1,而你是客户端 2,如果我尝试移动我的玩家对象,那么与您链接的对象如何作为一个玩家对象移动仅链接到一个对应的客户端。 ?

以上是关于多人游戏统一的主要内容,如果未能解决你的问题,请参考以下文章

多人游戏统一

局域网多人游戏场景更改

Animator.SetTrigger没有在多人游戏中调用

统一3D。试图在没有权限的情况下为对象发送命令

实时多人游戏或回合制多人游戏 API? [关闭]

如何使用我的游戏进入 Google Play“多人游戏”部分?