赞
踩
在联机游戏中,常见的模式有Peer-to-Peer
, Client
与Server
,也就是CS
架构。NetCode
基于CS
架构开发,下面讲解一些概念知识。在NetCode
中,会涉及一些如
IsHost
IsServer
IsClient
IsLocalPlayer
IsOwner
权威 / Authoritative
这些概念知识在实际项目开发中经常使用到,所以,非常有必要搞清楚这些概念知识。
如果运行该脚本的构建是该GameObject
的所有者,则该字段将为true。
例如,通过在NetworkManager上
的Player Prefab字段中分配玩家,玩家将被生成。因此,当玩家加入时,NetworkManager
将自动生成一个PlayerPrefab
并将该对象的所有权
赋予该玩家。
始终记住代码在何处运行。Player脚本将在每个构建中为每个玩家执行。因此,如果连接了4个玩家,那么在主机构建中将有4个Player脚本,只有其中一个将IsOwner设置为true。在第二个玩家构建中,仍将有4个Player脚本,并且再次只有一个(不同的一个)将IsOwner设置为true。
通过这种方式,我们确保只有本地玩家(相对于该构建而言)将运行Movement
和Interact
代码。
权威 / Authoritative
区分为服务端权威
与客户端权威
,还有两者混合使用。两者区分:
服务端权威(Server Authoritative)
:
客户端权威(Client Authoritative)
:
混合权威(Hybrid Authoritative)
哪个更好?服务器权威还是客户端权威?
没有全局的“最佳”选择,一切都取决于你正在制作的游戏。这个问题实际上涉及到信任,你是否信任你的客户端,或者即使客户端不可信,游戏仍然能正常运行?如果是的话,比如对于合作游戏,那么客户端权威可能会很好地工作。
如果你有一个更具竞争性的游戏,比如FPS,而且有玩家之间相互竞争的情况,这些玩家可能是陌生人,那么你可能不应该信任客户端,因此应该选择服务器权威。
IsHost
通常用于指示当前客户端是否充当游戏的主机。主机是游戏会话的创建者,通常负责托管游戏的核心逻辑和数据。
在某些游戏中,主机可能与Server
合并,但在其他游戏中,主机可能只是负责处理与本地游戏实例相关的事务,而Server
负责全局同步和多人游戏的处理。
通常,如果一个客户端是主机,则该客户端可以执行一些特殊的任务,如决策游戏的规则、同步状态等。
可以简单理解为Host
既是Server
又是Client
IsServer
通常用于指示当前客户端是否充当游戏的服务器。服务器负责处理游戏的全局状态和同步,以确保多个客户端之间的一致性。
在一些架构中,主机和服务器可能是相同的实体,但在其他情况下,它们可能是分离的。服务器通常是一个中央实体,负责维护整个游戏的状态,并将状态同步到所有连接的客户端。
理解这两个概念的关键在于了解游戏架构是如何设计的。在一些情况下,主机和服务器可以合并为一个实体,而在其他情况下,它们可能是不同的实体。通常,主机用于指代游戏会话的创建者和本地实例的控制者,而服务器用于指代全局状态的维护者和多人游戏的协调者。
IsClient
是一个用于判断当前代码是否在客户端运行的属性。
在代码中,开发者可以使用 IsClient
属性来区分处理客户端特有的逻辑。例如,处理本地输入、控制本地玩家对象等。
当需要在客户端和服务器端执行不同的代码时,可以帮助确保适当的逻辑仅在客户端执行。
IsLocalPlayer
通常用于标识一个游戏对象是否属于本地玩家。
在许多多人游戏系统中,每个客户端都可能有一个本地玩家,这是指在该客户端上进行控制的玩家。
当一个对象的 IsLocalPlayer
标志为真时,表示该对象在本地玩家的客户端上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。