当前位置: 首页 > news >正文

Unity Mirror学习(一) SyncVars特性使用

官网中所说的网络对象,指的是挂了 NetworkIdentity组件的对象
官网中所说的玩家对象,指的是NetworkManager脚本上的PlayerPrefab预制体
这个概念对阅读官网文档很重要,我刚开始并不理解,走了歪路

SyncVars(同步变量)特性

1,顾名思义,只是同步变量
2,SyncVars 是从NetworkBehaviour继承的类的属性
3,从服务端同步到客户端我的理解:服务端广播消息,消息=自定义的变量
4,类继承

示例:实现服务端点击按钮,客户端做出相应事件(图片颜色变红)

在这里插入图片描述
代码部分

using Mirror;
using UnityEngine;
using UnityEngine.UI;public class SyncVarChangeColor : NetworkBehaviour
{public Image image;public Toggle toggle;[SyncVar]bool _isOn;void Start(){if (isServer)//如果是服务端{image.gameObject.SetActive(false);toggle.gameObject.SetActive(true);}else{image.gameObject.SetActive(true);toggle.gameObject.SetActive(false);}toggle.onValueChanged.AddListener((isOn) =>{_isOn = isOn;});}private void Update(){if (_isOn){image.color = Color.red;}else{image.color = Color.white;}}
}

思考:在写下这段代码时,颜色改变我放在了点击事件里,客户端没反应。我在客户端打印了同步变量_isOn的值,值是发生改变的。

SyncVar hook 钩子特性

1,钩子(hook)可以指定当同步变量(SyncVar)在客户端上更改时,要调用的函数
2,钩子(hook)方法必须具有 两个 与 自定义的同步变量(SyncVar) 相同类型的参数
3,钩子(hook)可以是虚拟方法,并在派生类中重写
4,钩子(hook)调用顺序与脚本中定义SyncVar的顺序相同

对上述代码进行修改

using Mirror;
using UnityEngine;
using UnityEngine.UI;public class SyncVarChangeColor : NetworkBehaviour
{public Image image;public Toggle toggle;[SyncVar(hook = nameof(ChangeColor))]bool _isOn;void Start(){if (isServer){image.gameObject.SetActive(false);toggle.gameObject.SetActive(true);}else{image.gameObject.SetActive(true);toggle.gameObject.SetActive(false);}toggle.onValueChanged.AddListener((isOn) =>{_isOn = isOn;});}void ChangeColor(bool oldOn, bool newOn)//钩子(hook)方法 必须 要有两个参数{if (_isOn)image.color = Color.red;elseimage.color = Color.white;}
}

相关文章:

  • python opencv 读取文件夹下所有MP4文件并解析成jpg图像
  • 自然语言处理(一):RNN
  • 【TiDB】TiDB CLuster部署
  • Adobe家里那点事儿~~~
  • Django(四、路由层)
  • 一种艺术风格的神经算法:总结与实现
  • 【KVM-6】KVM/QEMU软件栈
  • Three.js 实现简单的PCD加载器(可从本地读取pcd文件)【附完整代码】
  • 短剧软件APP开发方案
  • Django知识点
  • C#中匿名类的声明及使用
  • vuejs - - - - - 移动端设备兼容(pxtorem)
  • QT QDockWidget
  • C++语言的广泛应用领域
  • arcgis基础篇--实验
  • [PHP内核探索]PHP中的哈希表
  • 【Amaple教程】5. 插件
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • dva中组件的懒加载
  • HTML5新特性总结
  • Laravel 中的一个后期静态绑定
  • mysql innodb 索引使用指南
  • Python十分钟制作属于你自己的个性logo
  • Rancher-k8s加速安装文档
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Yeoman_Bower_Grunt
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 前端js -- this指向总结。
  • 入口文件开始,分析Vue源码实现
  • 我感觉这是史上最牛的防sql注入方法类
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习ES6 变量的解构赋值
  • Linux权限管理(week1_day5)--技术流ken
  • 阿里云ACE认证学习知识点梳理
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (zhuan) 一些RL的文献(及笔记)
  • (十六)串口UART
  • (一)Thymeleaf用法——Thymeleaf简介
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net 简单实现MD5
  • .NET 指南:抽象化实现的基类
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET序列化 serializable,反序列化
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • /etc/fstab 只读无法修改的解决办法
  • @31省区市高考时间表来了,祝考试成功
  • @Resource和@Autowired的区别
  • @Responsebody与@RequestBody
  • @我的前任是个极品 微博分析
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [20171102]视图v$session中process字段含义
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [AX]AX2012 R2 出差申请和支出报告