同步变量
SyncVars是从NetworkBehaviour类继承的属性,这些属性从服务器同步到客户端。当游戏对象被生成或新玩家加入进行中的游戏时,它们会接收到所有可见的网络对象上的所有SyncVars的最新状态。使用SyncVar自定义属性来指定您想要同步的脚本中的变量。
在调用OnStartClient()之前,SyncVars的状态会应用到客户端的游戏对象上,因此在OnStartClient()内对象的状态始终是最新的。
SyncVars可以使用Mirror支持的任何类型。您可以在单个NetworkBehaviour脚本上有多达64个SyncVars,包括SyncLists(请参见下面的下一节)。
当SyncVar的值发生变化时,服务器会自动发送SyncVar更新,因此您无需跟踪它们何时更改或自己发送有关更改的信息。在检视器中更改值不会触发更新。
SyncVar hook属性可用于指定在客户端SyncVar更改值时要调用的方法。
SyncVar示例
假设我们有一个名为Enemy的带有脚本的网络对象:
public class Enemy : NetworkBehaviour
{
[SyncVar]
public int health = 100;
void OnMouseUp()
{
NetworkIdentity ni = NetworkClient.connection.identity;
PlayerController pc = ni.GetComponent<PlayerController>();
pc.currentTarget = gameObject;
}
}PlayerController可能如下所示:
在这个示例中,当玩家点击Enemy时,网络敌人游戏对象被分配给PlayerController.currentTarget。当玩家按下X键时,选择了正确目标,该目标通过一个在服务器上运行的Command传递,以减少health SyncVar。所有客户端都将更新为该新值。然后您可以在敌人上有一个UI来显示当前值。
类继承
SyncVars与类继承一起工作。考虑以下示例:
您可以将Cat组件附加到您的猫预制件上,它将同步其name和color。
警告
Cat和Pet应该在同一个程序集中。如果它们在不同的程序集中,请确保不直接从Cat内部更改name,而是在Pet中添加一个方法。 (Warning: BothCatandPetshould be in the same assembly. If they are in separate assemblies, make sure not to changenamefrom insideCatdirectly, add a method toPetinstead.)
最后更新于
这有帮助吗?