英文原文:
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;
}
}
}