Unity5.1 新的网络引擎UNET(八) UNET 系统概括
孙广东 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上。