同步字典
SyncDictionary(同步字典)是一个包含无序键值对列表的关联数组。键和值可以是任何支持的 Mirror 类型。默认情况下,我们使用 .Net Dictionary,这可能会对键和值施加额外的约束。
SyncDictionary(同步字典)的工作方式类似于SyncLists(同步列表):当您在服务器上进行更改时,更改会传播到所有客户端,并调用回调函数。只传输增量数据。
用法
在您的 NetworkBehaviour 类中添加一个类型为 SyncDictionary 的字段。
请注意,当您订阅回调时,字典已经初始化,因此您不会收到关于初始数据的调用,只会收到更新。
简单示例
using UnityEngine;
using Mirror;
public struct Item
{
public string name;
public int hitPoints;
public int durability;
}
public class ExamplePlayer : NetworkBehaviour
{
public readonly SyncDictionary<string, Item> Equipment = new SyncDictionary<string, Item>();
public override void OnStartServer()
{
Equipment.Add("head", new Item { name = "Helmet", hitPoints = 10, durability = 20 });
Equipment.Add("body", new Item { name = "Epic Armor", hitPoints = 50, durability = 50 });
Equipment.Add("feet", new Item { name = "Sneakers", hitPoints = 3, durability = 40 });
Equipment.Add("hands", new Item { name = "Sword", hitPoints = 30, durability = 15 });
}
public override void OnStartClient()
{
// Equipment is already populated with anything the server set up
// but we can subscribe to the callback in case it is updated later on
Equipment.Callback += OnEquipmentChange;
// Process initial SyncDictionary payload
foreach (KeyValuePair<string, Item> kvp in Equipment)
OnEquipmentChange(SyncDictionary<string, Item>.Operation.OP_ADD, kvp.Key, kvp.Value);
}
void OnEquipmentChange(SyncDictionary<string, Item>.Operation op, string key, Item item)
{
switch (op)
{
case SyncIDictionary<string, Item>.Operation.OP_ADD:
// entry added
break;
case SyncIDictionary<string, Item>.Operation.OP_SET:
// entry changed
break;
case SyncIDictionary<string, Item>.Operation.OP_REMOVE:
// entry removed
break;
case SyncIDictionary<string, Item>.Operation.OP_CLEAR:
// Dictionary was cleared
break;
}
}
}默认情况下,SyncDictionary使用Dictionary来存储数据。如果您想使用不同的 IDictionary 实现,比如SortedList或SortedDictionary,那么请使用 SyncIDictionary 并传递您想要使用的字典实例。例如:
最后更新于
这有帮助吗?