mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 19:10:32 +00:00
2.1 KiB
2.1 KiB
SyncHashSet
SyncHashSet
are sets similar to C# HashSet<T> that synchronize their contents from the server to the clients.
A SyncHashSet can contain any supported mirror type
Usage
Add a SyncHashSet field to your NetworkBehaviour class. For example:
public class Player : NetworkBehaviour {
[SerializeField]
readonly SyncHashSet<string> skills = new SyncHashSet<string>();
int skillPoints = 10;
[Command]
public void CmdLearnSkill(string skillName)
{
if (skillPoints > 1)
{
skillPoints--;
skills.Add(skillName);
}
}
}
You can also detect when a SyncHashSet changes. This is useful for refreshing your character in the client or determining when you need to update your database.
Subscribe to the Callback event typically during Start
, OnClientStart
or OnServerStart
for that.
Note that by the time you subscribe, the set will already be initialized, so you will not get a call for the initial data, only updates.
Note SyncSets must be initialized in the constructor, not in Startxxx(). You can make them readonly to ensure correct usage.
public class Player : NetworkBehaviour
{
[SerializeField]
public readonly SyncHashSet<string> buffs = new SyncHashSet<string>();
// this will add the delegate on the client.
// Use OnStartServer instead if you want it on the server
public override void OnStartClient()
{
buffs.Callback += OnBuffsChanged;
}
void OnBuffsChanged(SyncHashSet<string>.Operation op, string buff)
{
switch (op)
{
case SyncHashSet<string>.Operation.OP_ADD:
// we added a buff, draw an icon on the character
break;
case SyncHashSet<string>.Operation.OP_CLEAR:
// clear all buffs from the character
break;
case SyncHashSet<string>.Operation.OP_REMOVE:
// We removed a buff from the character
break;
}
}
}