NetworkMigrationManager

class in UnityEngine.Networking

/

继承自:MonoBehaviour

切换到手册

描述

一个管理着新主机在旧主机丢失时接管游戏的过程的组件。这一过程称为“主机迁移”。迁移管理器将有关游戏中每个对等方的信息发送给所有客户端,当主机因崩溃或网络中断而丢失时,客户端可以选择新主机并继续游戏。

旧主机能够重新加入新主机上的新游戏。

在主机迁移过程中,具有 NetworkIdentity 的所有对象上的 SyncVars 和 SyncLists 的状态会保持不变。对象的自定义序列化数据也是如此。

主机丢失时,游戏中的所有玩家对象都会被禁用。然后,当其他客户端重新加入新主机上的新游戏时,这些客户端对应的玩家会在主机上被重新启用,并在其他客户端上重新生成。主机迁移过程中不会丢失玩家状态数据。

此类提供了一个简单的默认 UI,用于控制主机丢失时的行为。可以使用 showGUI 属性将该 UI 禁用。可以使用许多虚拟函数来自定义主机迁移的行为。

请注意,在主机迁移过程中,只有客户端可用的数据会被保留。如果数据只存在于服务器上,则成为新主机的客户端将无法使用该数据。这意味着不在 SyncVars 或 SyncLists 中的主机上的数据将在主机迁移后不可用。

客户端成为新主机后,系统会针对所有联网对象调用回调函数 OnStartServer。

在新主机上,NetworkMigrationManager 会使用函数 NetworkServer.BecomeNewHost() 从当前 ClientScene 中的状态构建联网服务器场景。

游戏中启用主机迁移的对等方通过其在服务器上的 connectionId 来标识。当客户端重新连接到游戏的新主机时,此 connectionId 将被传递给新主机,这样新主机可以将该客户端与之前连接旧主机的客户端匹配。该 ID 在 ClientScene 上设置为“reconnectId”。

游戏的旧主机,即崩溃或失去网络连接的主机,也可以作为客户端重新连接到新游戏。该客户端使用特殊的 ReconnectId:ClientScene.ReconnectIdHost(为零)。

变量

client用于连接到主机的客户端实例。
disconnectedFromHost为 true 表示这是一个已从主机断开的客户端。
hostMigration控制主机迁移是否处于活动状态。
hostWasShutdown如果这是已被关闭的主机,则为 true。
matchInfo有关匹配的信息。如果没有匹配,则此属性可能为空。
newHostAddress要连接到的新主机的 IP 地址。
offsetX迁移管理器默认 GUI 的 X 偏移(以像素为单位)。
offsetY迁移管理器默认 GUI 的 Y 偏移(以像素为单位)。
oldServerConnectionId此客户端在旧主机上分配到的 connectionId。
peers参与游戏的对等方。其中包含主机和此客户端。
pendingPlayers已被禁用并在等待其相应客户端重新连接的玩家对象。
showGUI用于切换显示默认 UI 的标志。
waitingReconnectToNewHost如果此客户端之前从主机断开并正在等待重新连接新主机,则为 true。
waitingToBecomeNewHost如果此客户端之前从主机断开并被选为新主机,则为 true。

公共函数

BecomeNewHost让已从主机断开的客户端成为游戏的新主机。
DisablePlayerObjects这会导致已知玩家的对象被禁用。
FindNewHost从游戏中选择一个对等方作为新主机的实用函数。
Initialize用于通过客户端和匹配信息来初始化迁移管理器。
LostHostOnClient在客户端丢失与主机的连接后,应该在客户端上调用此函数。
LostHostOnHost在主机已被关闭时,应该在主机上调用此函数。
ReconnectObjectForConnection使用重新连接的客户端重新建立一个具有客户端权限的非玩家对象。与 NetworkServer.SpawnWithClientAuthority() 类似。
ReconnectPlayerForConnection使用重新连接的客户端重新建立一个玩家对象。与 NetworkServer.AddPlayerForConnection() 类似。玩家游戏对象将成为新连接的玩家对象。
Reset重置迁移管理器并设置 ClientScene 的 ReconnectId。
SendPeerInfo将游戏中的对等方发送到游戏中的所有对等方。

受保护的函数

OnAuthorityUpdated在非玩家对象的权限发生更改时调用的虚拟函数。
OnClientDisconnectedFromHost在客户端从主机断开连接时调用的虚拟函数。
OnPeersUpdated在游戏中的对等方发生更改时调用的虚拟函数。
OnServerHostShutdown在主机关闭时调用的虚拟函数。
OnServerReconnectObject当来自旧主机的客户端重新连接新主机时,在新主机上针对具有客户端权限的非玩家对象调用的虚拟函数。
OnServerReconnectPlayer当来自旧主机的客户端重新连接新主机时,在新主机上调用的虚拟函数。

继承的成员

变量

enabled启用的 Behaviour 可更新,禁用的 Behaviour 不可更新。
isActiveAndEnabled已调用启用的 Behaviour。
gameObject此组件附加到的游戏对象。始终将组件附加到游戏对象。
tag此游戏对象的标签。
transform附加到此 GameObject 的 Transform。
runInEditMode允许 MonoBehaviour 的特定实例在编辑模式下运行(仅可在 Editor 中使用)。
useGUILayout禁用该属性可跳过 GUI 布局阶段。
hideFlags该对象应该隐藏、随场景一起保存还是由用户修改?
name对象的名称。

公共函数

BroadcastMessage调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法。
CompareTag此游戏对象是否使用 tag 进行了标记?
GetComponent如果游戏对象附加了类型为 type 的组件,则将其返回,否则返回 null。
GetComponentInChildren使用深度首次搜索返回 GameObject 或其任何子项中类型为 type 的组件。
GetComponentInParent返回 GameObject 或其任何父项中类型为 type 的组件。
GetComponents返回 GameObject 中类型为 type 的所有组件。
GetComponentsInChildren返回 GameObject 或其任何子项中类型为 type 的所有组件。
GetComponentsInParent返回 GameObject 或其任何父项中类型为 type 的所有组件。
SendMessage调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。
SendMessageUpwards调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法。
CancelInvoke取消该 MonoBehaviour 上的所有 Invoke 调用。
Invoke在 time 秒后调用 methodName 方法。
InvokeRepeating在 time 秒后调用 methodName 方法,然后每 repeatRate 秒调用一次。
IsInvoking是否有任何待处理的 methodName 调用?
StartCoroutine启动一个协同程序。
StopAllCoroutines停止在该行为上运行的所有协同程序。
StopCoroutine停止在该行为上运行的第一个名为 methodName 的协同程序或存储在 routine 中的协同程序。
GetInstanceID返回对象的实例 ID。
ToString返回 GameObject 的名称。

静态函数

print将消息记录到 Unity 控制台(与 Debug.Log 相同)。
Destroy删除 GameObject、组件或资源。
DestroyImmediate立即销毁对象 /obj/。强烈建议您改用 Destroy。
DontDestroyOnLoad加载新场景时,不自动销毁对象 /target/。
FindObjectOfType返回第一个类型为 type 的已加载的激活对象。
FindObjectsOfType返回所有类型为 type 的已加载的激活对象的列表。
Instantiate克隆 original 对象并返回克隆对象。

运算符

bool该对象是否存在?
operator !=比较两个对象是否引用不同的对象。
operator ==比较两个对象引用,判断它们是否引用同一个对象。

消息

AwakeAwake 在加载脚本实例时调用。
FixedUpdate用于物理计算且独立于帧率的 MonoBehaviour.FixedUpdate 消息。
LateUpdate如果启用了 Behaviour,则每帧调用 LateUpdate。
OnAnimatorIK用于设置动画 IK(反向运动学)的回调。
OnAnimatorMove用于处理动画移动以修改根运动的回调。
OnApplicationFocus当玩家获得或失去焦点时,发送给所有 GameObject。
OnApplicationPause当应用程序暂停时,发送给所有 GameObject。
OnApplicationQuit在应用程序退出前,发送给所有游戏对象。
OnAudioFilterRead如果实现了 OnAudioFilterRead,Unity 将在音频 DSP 链中插入一个自定义滤波器。
OnBecameInvisibleOnBecameInvisible 在渲染器对任何摄像机都不可见时调用。
OnBecameVisibleOnBecameVisible 在渲染器变为对任意摄像机可见时调用。
OnCollisionEnter当该碰撞体/刚体已开始接触另一个刚体/碰撞体时,调用 OnCollisionEnter。
OnCollisionEnter2D当传入碰撞体与该对象的碰撞体接触时发送(仅限 2D 物理)。
OnCollisionExit当该碰撞体/刚体已停止接触另一个刚体/碰撞体时,调用 OnCollisionExit。
OnCollisionExit2D当另一个对象上的碰撞体停止接触该对象的碰撞体时发送(仅限 2D 物理)。
OnCollisionStay对应正在接触刚体/碰撞体的每一个碰撞体/刚体,每帧调用一次 :ref::OnCollisionStay。
OnCollisionStay2D在另一个对象上的碰撞体正在接触该对象的碰撞体时发送每个帧(仅限 2D 物理)。
OnConnectedToServer成功连接到服务器后在客户端上调用。
OnControllerColliderHit当该控制器在执行 Move 时撞到碰撞体时调用 OnControllerColliderHit。
OnDestroy销毁附加的行为将导致游戏或场景收到 OnDestroy。
OnDisable该函数在行为被禁用时调用。
OnDisconnectedFromServer当连接丢失或与服务器断开连接时,在客户端上调用。
OnDrawGizmos如果您想绘制能够选择并且始终绘制的辅助图标,则可以实现 OnDrawGizmos。
OnDrawGizmosSelected如果选择了对象,则实现 OnDrawGizmosSelected 来绘制辅助图标。
OnEnable该函数在对象变为启用和激活状态时调用。
OnFailedToConnect出于某种原因连接尝试失败时,在客户端上调用。
OnFailedToConnectToMasterServer在连接到 MasterServer 时发生问题的情况下,在客户端或服务器上调用。
OnGUI系统调用 OnGUI 来渲染和处理 GUI 事件。
OnJointBreak在附加到相同游戏对象的关节断开时调用。
OnJointBreak2D在附加到相同游戏对象的 Joint2D 断开时调用。
OnMasterServerEvent在从 MasterServer 报告事件时,在客户端或服务器上调用。
OnMouseDown当用户在 GUIElement 或 Collider 上按下鼠标按钮时,将调用 OnMouseDown。
OnMouseDrag当用户单击 GUIElement 或 Collider 并仍然按住鼠标时,将调用 OnMouseDrag。
OnMouseEnter当鼠标进入 GUIElement 或 Collider 时调用。
OnMouseExit当鼠标不再处于 GUIElement 或 Collider 上方时调用。
OnMouseOver当鼠标悬停在 GUIElement 或 Collider 上时,每帧调用一次。
OnMouseUp当用户松开鼠标按钮时,将调用 OnMouseUp。
OnMouseUpAsButton松开鼠标时,仅当鼠标在按下时所在的 GUIElement 或 Collider 上时,才调用 OnMouseUpAsButton。
OnNetworkInstantiate在已通过 Network.Instantiate 进行网络实例化的对象上调用。
OnParticleCollision当粒子击中碰撞体时,将调用 OnParticleCollision。
OnParticleTrigger当粒子系统中的任何粒子满足触发模块中的条件时,将调用 OnParticleTrigger。
OnPlayerConnected每当有新玩家成功连接,就在服务器上调用。
OnPlayerDisconnected每当有玩家与服务器断开连接,就在服务器上调用。
OnPostRender在摄像机完成场景渲染后,将调用 OnPostRender。
OnPreCullOnPreCull 在摄像机剔除场景前调用。
OnPreRenderOnPreRender 在摄像机开始渲染场景前调用。
OnRenderImageOnRenderImage 在图像的所有渲染操作全部完成后调用。
OnRenderObjectOnRenderObject 在摄像机渲染场景后调用。
OnSerializeNetworkView用于在网络视图监视的脚本中自定义变量同步。
OnServerInitialized每当调用 Network.InitializeServer 并且完成时,对该服务器调用该函数。
OnTransformChildrenChanged当 GameObject 的变换的子项列表发生更改时,将调用该函数。
OnTransformParentChanged当 GameObject 的变换的父属性发生更改时,将调用该函数。
OnTriggerEnter当 Collider other 事件进入该触发器时调用 OnTriggerEnter。
OnTriggerEnter2D当另一个对象进入附加到该对象的触发碰撞体时发送(仅限 2D 物理)。
OnTriggerExit当 Collider other 已停止接触该触发器时调用 OnTriggerExit。
OnTriggerExit2D当另一个对象离开附加到该对象的触发碰撞体时发送(仅限 2D 物理)。
OnTriggerStay对于接触触发器的每一个 Collider /other/,每次物理更新调用一次 OnTriggerStay。
OnTriggerStay2D在另一个对象位于附加到该对象的触发碰撞体之内时发送每个帧(仅限 2D 物理)。
OnValidate加载脚本后或 Inspector 中的值发生更改时,将调用该函数(只能在 Editor 中调用)。
OnWillRenderObject如果对象可见并且不是 UI 元素,则为每个摄像机调用 OnWillRenderObject。
Reset重置为默认值。
Start在首次调用任何 Update 方法之前启用脚本时,在帧上调用 Start。
Update如果启用了 MonoBehaviour,则每帧调用 Update。