[Unity Mirror] SyncSortedSet

81 篇文章 31 订阅
本文档介绍了如何使用Unity的Mirror库中的SyncSortedSet类,该类用于在网络同步中实现类似C# SortedSet的功能。SyncSortedSet在插入元素时会自动排序,但可能影响性能。示例代码展示了如何声明和初始化只读的SyncSortedSet,以及如何在客户端和服务器端监听其变化以更新角色状态或数据库。
摘要由CSDN通过智能技术生成

英文原文:

https://mirror-networking.gitbook.io/docs/guides/synchronization/syncsortedset

  SyncSortedSet 是类似于 C# SortedSet 的集合,可将其内容从服务器同步到客户端。

  与 SyncHashSet 不同,SyncSortedSet 中的所有元素在插入时都会进行排序。请注意,这有一些性能影响。

  SyncSortedSet 可以包含任何支持的 mirror 类型


使用方法

SyncSortedSet 必须声明为只读并在构造函数中初始化。

将 SyncSortedSet 字段添加到您的 NetworkBehaviour 类。例如:

class Player : NetworkBehaviour
{
    public readonly SyncSortedSet<string> skills = new SyncSortedSet<string>();
    int skillPoints = 10;

    [Command]
    public void CmdLearnSkill(string skillName)
    {
        if (skillPoints > 1)
        {
            skillPoints--;
            skills.Add(skillName);
        }
    }
}

  您还可以检测 SyncSortedSet 何时更改。这对于刷新客户端中的角色或确定何时需要更新数据库很有用。通常在 Start、OnClientStart 或 OnServerStart 期间订阅 Callback 事件。

请注意,当您订阅时,该集合已经初始化,因此您不会收到初始数据的调用,只会更新。

class Player : NetworkBehaviour
{
    [SerializeField]
    public readonly SyncSortedSet<string> buffs = new SyncSortedSet<string>();

    // 这将在客户端上添加委托。
    // 如果您希望它在服务器上,请改用 OnStartServer
    public override void OnStartClient()
    {
        buffs.Callback += OnBuffsChanged;

        // 处理初始 SyncSortedSet 有效负载
        foreach (string buff in buffs)
            OnBuffsChanged(SyncSortedSet<string>.Operation.OP_ADD, buff);
    }

    // SyncSortedSet 继承自 SyncSet 所以在这里使用 SyncSet
    void OnBuffsChanged(SyncSortedSet<string>.Operation op, string buff)
    {
        switch (op)
        {
            case SyncSortedSet<string>.Operation.OP_ADD:
                // 为角色添加了一个buff
                break;
            case SyncSortedSet<string>.Operation.OP_REMOVE:
                // 移除了角色的增益
                break;
            case SyncSortedSet<string>.Operation.OP_CLEAR:
                // 清除角色的所有增益
                break;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值