Unity_Unet NetworkBehaviour方法及属性详解
(2016-12-09 14:47:06)
标签:
unetunitynetworkbehaviour |
分类: Unity_Unet |
网络功能脚本的基类
应该由包含网络功能的脚本继承的基类。
这是一个MonoBehaviour类,因此需要使用网络功能的脚本应该继承此类而不是MonoBehaviour。 它允许您调用网络操作,接收各种回调,并从服务器到客户端自动同步状态。
NetworkBehaviour组件需要游戏对象上的NetworkIdentity。 在单个游戏对象上可以有多个NetworkBehavour。 对于具有子级组件的对象,NetworkIdentity必须位于根对象上,NetworkBehaviour脚本也必须位于根对象上。
网络系统的一些内置组件来自NetworkBehaviour,包括NetworkTransport,NetworkAnimator和NetworkProximityChecker。
Variables
ConnectionToClient :
与此NetworkIdentity关联的NetworkConnection。This is only valid for player objects on the server
ConnectionToServer 同上
HasAuthority 如果此对象是分布式网络应用程序中对象的有权限版本,则返回true
isClient如果作为客户端运行,则返回true,并且此对象由服务器生成。
isLocalPlayer如果此对象是表示本地计算机上的玩家对象,则返回true。
isServer如果此对象在活动服务器上处于活动状态,则返回true
localPlayerAuthority: 此值在NetworkIdentity上设置,可在此处访问以便于脚本访问。
Netid: 此对象的唯一网络ID。
PlayerControllerId 与行为相关联的玩家的ID
Public Functions
ClearAllDirtyBits:
这将清除由SetDirtyBits()在此脚本上设置的所有脏位,
GetNetworkChannel : 此虚拟函数用于指定用于此脚本的SyncVar更新的QoS通道
GetNetworkSendInterval
此虚拟函数用于指定用于此脚本的SyncVar更新的发送间隔。
InvokeCommand
InvokeRPC 手动调用RPC功能
InvokeSyncEvent
OnCheckObserver: Visibility系统的回调函数,用于确定观察者(Player)是否可以看到此对象
OnDeserialize虚函数覆盖以接收自定义序列化数据。 发送序列化数据的相应函数是OnSerialize()。
OnNetworkDestory: 当服务器导致此对象被销毁时,在客户端上调用。
OnRebuildObservers 可见性系统使用的回调构造可以看到此对象的观察者集合。
Public bool OnRebuildObservers(HashSet observers , bool initialize)
Observers:这个对象新的观察者集合
Initialize:如果第一次构建观察者集合则为真
返回值:如果此函数起作用,返回True
此回调的实现应添加可以看到此对象的玩家的网络连接到观察者集合。
Public bool OnSerialize(Networking。NetworkWriter writer ,bool initialState)
Writer :用于写入流的Writer
InitialState 如果这是被调用来发送初始状态
Returns
Description:
该虚函数通过重写来自定义序列化数据。与发送序列化数据相对应的函数是OnDeserialize()
InitialState标志有助于区分第一次对象序列化和发送增量更新时,第一次将对象发送到客户端时,它必须包括完整状态快照,但后续更新可以通过仅包括增量更改来节省带宽。注意,当initialState为true时,不调用SyncVar钩子函数,仅用于增量更新。
如果一个类有SyncVars,那么这个函数和OnDeserialize()的实现会自动添加到类中。因此,具有SyncVars的类也不能具有自定义序列化函数。
OnSerialize函数应返回true以指示应发送更新。如果它返回true,那么该脚本的脏位被设置为零,如果它返回false,那么脏位不改变。这允许对脚本的多个更改随时间累积,并在系统就绪时发送,而不是每个帧。
Public void OnSetLocalVisiblity(bool vis)
可见性系统对主机上对象使用的回调
当主机(具有本地客户端)上的对象不可见于本地客户端时,无法禁用或销毁它们。 所以调用此函数允许自定义代码隐藏这些对象。 典型的实现将禁用对象上的渲染器组件。 这仅在主机上的本地客户端上调用。
Public void OnStartAuthority();
这是基于上下文和NetworkIdentity.localPlayerAuthority有权限的行为上调用的。
这在OnStartServer和OnStartClient之后调用。
当在服务器上调用NetworkIdentity.AssignClientAuthority时,将在拥有该对象的客户端上调用。 当使用NetworkServer.SpawnWithClientAuthority
Public void OnStartClient():
当在客户端上激活每个NetworkBehaviour时调用
主机上的对象可以调用此函数,因为主机上有一个本地客户端。当在客户端上调用此函数时,对象上的SyncVars的值保证来自服务器的最新状态正确地初始化。
Public void OnStartLocalPlayer():
用于设置本地玩家对象时调用
这发生在OnStartClient()之后,因为它是由来自服务器的所有权消息触发的,这是为激活本地玩家的组件或功能(例如相机和输入)的适当位置。
Public void OnStartServer():
当NetworkBehaviour对象在服务器上处于活动状态时,将调用此方法.
这可以由场景中对象的NetworkServer.Listen()或动态创建的对象的NetworkServer.Spawn()触发。
这将为”主机”上的对象以及专用服务器上的对象调用.
Public void OnStopAuthority():
这在权限被删除时的行为上被调用。
当在服务器上调用NetworkIdentity.RemoveClientAuthority时,将在拥有该对象的客户端上调用。
Public void PreStartClient():
在客户端对象上调用以解析GameObject引用的内部方法。
将用户代码放在此函数中时不安全的,因为它可能被网络系统的代码生成过程替代。
Public void SetDirtyBit(uint dirtyBit):
dirtyBit 位掩码
用于将行为设置为dirty.以便为对象发送网络更新。
二:Delegates
Public delegate void CmdDelegate(Networking.NetworkBehaviour obj, Networking.NetworkReader reader):
Public delegate void EvnetDelegate(Listtargets,Networking.NetworkReader reader)

加载中…