同步变量

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组件附加到您的猫预制件上,它将同步其namecolor

警告 CatPet应该在同一个程序集中。如果它们在不同的程序集中,请确保不直接从Cat内部更改name,而是在Pet中添加一个方法。 (Warning: Both Cat and Pet should be in the same assembly. If they are in separate assemblies, make sure not to change name from inside Cat directly, add a method to Pet instead.)

最后更新于

这有帮助吗?