Mirror网络库插件使用4

Synchronization

一个NetworkBehaviour脚本,最多存在64个同步变量,

SyncVar,SyncVar Hooks,SyncList,SyncDictionary,SyncHashSet,SyncSortedSet的数量数量之和不能超过64个。

示例,如果存在61个SyncList变量,SyncVar的数量最多有3个。

SyncVar

同步方向:服务器到客户端

同步时机:数据改变时;生成游戏对象时,新用户加入时;

使用要求:继承NetworkBehaviour的脚本中可以使用该特性,最多可以使用64个。

SyncVar Hooks

在SyncVar的基础上添加了回调函数。

hook指定的是字符串,建议使用nameof包裹方法名,后续方便查找。

csharp 复制代码
   [SyncVar(hook = nameof(OnColorChanged))]
   Color playerColor = Color.black;
   void OnColorChanged(Color oldColor, Color newColor){}

hook是按照Syncvar变量在文件中定义的顺序调用的。

csharp 复制代码
public class MyBehaviour : NetworkBehaviour 
{
    [SyncVar] 
    int X;
    [SyncVar(hook = nameof(Hook1))] 
    int Y;
    [SyncVar(hook = nameof(Hook2))]
    int Z;
}

调用顺序为设置x数值;设置y数值,调用Hook1方法;设置z数值;调用Hook2方法。

SyncList

类似C#的List,用于将内容从服务器同步到客户端。
要求 :必须声明为readonly,并在定义时实例化。

服务器上可以使用SyncList进行增删改查。

客户端上监听变化:

OnStartClient中注册监听,OnStopClient中取消监听。

监听方法有OnAdd,OnInsert,OnRemove,OnSet,OnClear。

OnChange会在上述操作之后调用,建议不使用OnChange。
注意

  1. 列表的引用不能修改,可以调用Add,Remove改变列表内容。
  2. 由于 SyncList 的初始数据同步发生在 OnStartClient 之前,而事件是在同步之后才订阅的,所以已有的元素不会自动触发回调。
  3. 列表元素如果是引用类型,修改元素内容不会触发回调,将修改后的对象重新赋值会触发OnSet。
csharp 复制代码
Item temp = inventory[0];
temp.amount = 5;
inventory[0] = temp;

SyncDictionary

类似C#的Dictionary,用于将内容从服务器同步到客户端。
要求 :必须声明为readonly,并在定义时实例化。

服务器上进行增删改查;客户端上监听变化。

OnStartClient注册监听,OnStopClient中取消监听。

监听方法有:OnAdd,OnSet,OnRemove,OnClear。

OnChange会在上述操作之后调用,建议不使用OnChange。
注意:

  1. 字典的引用不能修改,可以使用字典添加和移除元素;
  2. 由于字典的初始数据同步发生在 OnStartClient 之前,而事件是在同步之后才订阅的,所以已有的元素不会自动触发回调。
  3. 直接修改已存在值对象的内部字段不会被视为字典的变化。必须将修改后的对象重新赋值给同一个键。
csharp 复制代码
EquipmentItem item = equipment["head"];
item.durability -= 10;
equipment["head"] = item;

SyncHashSet

类似C#的hashset,用于将内容从服务器同步到客户端。
要求 :必须声明为readonly,并在定义时实例化。

服务器上进行增删改查;客户端上监听变化。

OnStartClient注册监听,OnStopClient中取消监听。

监听方法有:OnAdd,OnRemove,OnClear。

OnChange会在上述操作之后调用,建议不使用OnChange。
注意:

  1. hashset的引用不能修改,可以使用hashset添加和移除元素
  2. 由于hashset的初始数据同步发生在 OnStartClient 之前,而事件是在同步之后才订阅的,所以已有的元素不会自动触发回调。

SyncSortedSet

类似C#的SortedSet,用于将内容从服务器同步到客户端。

既有SyncHashSet的功能,又有自动排序 功能。可自定义排序规则。
要求 :必须声明为readonly,并在定义时实例化。

服务器上进行增删改查;客户端上监听变化。

OnStartClient注册监听,OnStopClient中取消监听。

监听方法有:OnAdd,OnRemove,OnClear。

OnChange会在上述操作之后调用,建议不使用OnChange。
注意:

OnChange会在上述操作之后调用,建议不使用OnChange。

  1. srotedset的引用不能修改,可以使用sortedset添加和移除元素
  2. 由于sorted的初始数据同步发生在 OnStartClient 之前,而事件是在同步之后才订阅的,所以已有的元素不会自动触发回调。
相关推荐
wuqingshun31415914 小时前
说说mybatis的缓存机制
java·缓存·mybatis
空中海14 小时前
Kubernetes 生产实践、可观测性与扩展入门
java·贪心算法·kubernetes
云安全助手15 小时前
弹性云服务器+高防IP:让DDoS攻击不再是业务“生死劫”
运维·网络·安全
AC赳赳老秦15 小时前
OpenClaw二次开发实战:编写专属办公自动化技能,适配个性化需求
linux·javascript·人工智能·python·django·测试用例·openclaw
Devin~Y15 小时前
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
java·spring boot·redis·mysql·spring cloud·kafka·kubernetes
bLEd RING15 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
小松加哲15 小时前
Spring MVC 核心原理全解析
java·spring·mvc
mounter62515 小时前
【内核新动向】告别物理槽位束缚:深度解析 Linux Virtual Swap Space 机制
linux·内存管理·kernel·swap·virtual swap
handler0115 小时前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
Ulyanov15 小时前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真