孙广东   2015.7.12

Server and Host

在Unity 的 网络系统,游戏有 一个server和多个client。

当没有专用的server时,client之中的一个扮演server的角色 — — 我们称之为此client“host”

host (主机)是一个server和 client在同一进程中。

主机 将使用一种特殊的client被称为 LocalClient。而其它client是 RemoteClients。LocalClient 与(本地) server通信 通过直接的函数调用和消息队列,由于它是同一进程中。它实际上与server共享一个 场景。RemoteClients 通过定期的网络连接与server进行通信。

网络系统的目标是 LocalClients 和 RemoteClients 的代码是同样的,所以开发人员仅仅需大部分时间想一种类型的client的。

Instantiate and Spawn

在Unity中,GameObject.Instantiate 创建新的Unity游戏对象。但与联网系统在一起, 对象必须也会“spawned” 要在网络上激活。这仅仅能在server上,而且导致要在连接的client上创建对象。一旦对象被Spawning System生成,分布式的对象生命周期管理和状态同步。

Players, Local Players and Authority

在网络系统中。玩家对象都是特殊的。

还有伴玩游戏,每一个人的player 对象和 命令 都将路由 到该对象。一个人不能对还有一个人的player对象调用命令 – 仅仅有他们自己。所以是的“my” player 对象的概念。

当加入一个player 和联系 把他们连接时。这个player对象就成为该玩家client上的“local player” 对象。

那里是被设置为 true,而且回调在client上的对象调用的 OnStartLocalPlayer() 属性 isLocalPlayer。下图显示两个client和他们 local players.。

仅仅是 “yours” 的player对象  将已设置了 isLocalPlayer 标志。这能够用于筛选  输入的处理,能够处理相机附件。或做不论什么其它client仅仅应做为您的player的身边事。

除了 isLocalPlayer,player对象能够有 “local authority”.  这意味着其拥有者的client上的player对象是负责对象 — — 它有授权。

最经常使用的是 控制运动,但也被使用其它的东西。NetworkTransform 组件明确这一点,并将从client发送移动,假设设置该选项。NetworkIdentity 有一个复选框用于设置 LocalPlayerAuthority。

对于非玩家对象如敌人,还有没有相关联的client。所以权威驻留在server上。

NetworkBehaviour 上的属性 “isAuthority” 能够用来告诉是否 对象具有授权。

所以非玩家对象在server上,具有权威和player对象与 localPlayerAuthority 有授权在其拥有者的client上。

版权声明:本文为jhcelue原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jhcelue/p/6861372.html