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

news2024/11/27 2:23:43

官网中所说的网络对象,指的是挂了 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;
        else
            image.color = Color.white;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1192993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wav格式如何转mp3?

wav格式如何转mp3?WAV格式是一种高品质的音频文件格式,其采用无损压缩技术存储音频数据。通常,WAV文件使用PCM编码方式将声音信号转换为数字信号,并按照一定规则存储到文件中。这种编码方式可以确保音频数据的完整性和准确性&…

电脑硬盘数据恢复哪个好?值得考虑的 8 个硬盘恢复软件解决方案

借助硬盘恢复软件,任何人都可以在家中恢复丢失的文件,而无需任何特殊技能。事实上,最困难的一步是选择最佳解决方案,因为可用选项的数量可能有点多。幸运的是,这篇文章可以为您提供帮助。 8 款顶级硬盘数据恢复软件解决…

MemcachedRedis构建缓存服务器 (数据持久化,主从同步,哨兵模式)

Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。降低数据库读的压力 Nsql的优点:高可扩展性,分布式计算,低成本,…

EMERSON艾默生变频器维修M600/M701/M702

艾默生变频器维修常见系列: EV1000 系列:体积小,操作简便,适用于塑料机械、纺织机械、烟草机械、陶瓷机械、制药机械食品机械、印刷机械、包装机械、空调等专用设备配套。 EV2000 系列:功率范围广,功能更…

【Python】数据分析案例:世界杯数据可视化 | 文末送书

文章目录 前期数据准备导入数据 分析:世界杯中各队赢得的比赛数分析:先打或后打的比赛获胜次数分析:世界杯中的抛硬币决策分析:2022年T20世界杯的最高得分者分析:世界杯比赛最佳球员奖分析:最适合先击球或追…

Android—幸运抽奖火箭发射倒计时(第六次作业)

Android—幸运抽奖&&点火发射(第六次作业) 创建项目 准备工作 修改按钮的颜色,如果不修改这行代码,那么后期给按钮添加background属性的时候,按钮并不会发生变化。 设置按钮的样式文件btn_press_blue.xml&am…

innovus/ICC2:实际绕线层次有低于routing rule min layer的情况如何解决?

ICC2 这是因为routing rule的min layer是soft rule,如果希望min layer严格按照设置的来,还需要手动添加如下命令: set_routing_rule -min_layer_mode hard -rule xx [get_nets xx] innovus 设置route type是加入min_stack_layer选项。 create_route_…

react 修改less文件后保存,内存溢出,项目崩溃问题解决

一、完整报错 一个很老的react项目,因为没有package-lock.json版本锁,导致拉下来的时候,安装的依赖版本冲突,好不容易启动起来,修改less文件后只要一保存,项目就会崩溃,需要重启,报…

nginx配置和热部署实践

目录 一、nginx配置文件 1.配置文件 2.nginx配置文件语法 3.include 二、nginx.conf参数 1.user参数 2.nginx.conf重要的指令块 3.nginx命令行 三、nginx热部署功能实践 1.热部署的特点 2.大致流程 3.环境准备 4.备份旧nginx二进制文件 5.下载编译安装新的nginx …

vue:实现顶部消息横向滚动通知

前言 最近有个需求&#xff0c;是在系统顶部展示一个横向滚动的消息通知。需求很简单&#xff0c;就是消息内容从右往左一直滚动。 效果如下&#xff1a; 因为我的需求很简单&#xff0c;功能就这样。如果有什么其他需求&#xff0c;可以再继续修改。 代码 使用 <noti…

SQL表、字段、查询参数获取

SQL工具类表、字段、查询参数提取 1. 执行效果2. 使用2.1 引入依赖2.2 相关实体2.3 工具类 1. 执行效果 2. 使用 2.1 引入依赖 <!-- sql 解析处理--><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifact…

说说你在使用React 过程中遇到的常见问题?如何解决?

一、前言 在使用react开发项目过程中&#xff0c;每个人或多或少都会遇到一些"奇怪"的问题&#xff0c;本质上都是我们对其理解的不够透彻 react 系列&#xff0c;33个工作日&#xff0c;33次凌晨还在亮起的台灯&#xff0c;到今天就圆满画上句号了&#xff0c;比心…

通用工作站设计方案 :807-ORI-S3R500 -多路PCIe3.0的单CPU通用工作站

ORI-S3R500 -多路PCIe3.0的单CPU通用工作站 (研华工业计算机IPC-610&#xff0c;IPC940 升级款) 一、机箱功能和技术指标&#xff1a; 系统 系统型号 ORI-SR500 主板支持 EEB(12*13)/CEB(12*10.5)/ATX(12*9.6)/Mi cro ATX 前置硬盘 最大支持2个3.5寸1个2.5寸SATA …

2024 款:最新前端技术趋势

Hello&#xff0c;大家好&#xff0c;我是 Sunday。 上一次的时候聊了 那么些已经落后的前端开发技术 。但是光知道什么技术落后了是不够的&#xff0c;咱们还得知道 前端最新的技术趋势是什么。所以&#xff0c;今天这篇文章&#xff0c;咱们就来聊一聊&#xff0c;2023 最新…

IDEA 使用Reset Current Branch to Here 进行git 版本控制,图文操作

文章目录 一、总结区别&#xff08;只针对本地仓库操作&#xff09;Soft详细解释文件版本冲突处理 Mixed详细解释Hard详细解释Keep详细解释文件版本冲突处理 二、其他Revert commit 参考文档 一、总结区别&#xff08;只针对本地仓库操作&#xff09; Soft详细解释 Soft操作只…

Linux本地部署1Panel现代化运维管理面板并实现公网访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

nginx的配置文件说明

nginx的配置文件说明 https://blog.csdn.net/S_ZaiJiangHu/article/details/126838279 https://blog.csdn.net/qq_33454884/article/details/89212702 二、nginx的正向代理和反向代理 2.1 nginx的反向代理 2.1.1 反向代理说明 对于客户端来说&#xff0c;反向代理就好像目标…

STM32——NVIC中断优先级管理分析

文章目录 前言一、中断如何响应&#xff1f;NVIC如何分配优先级&#xff1f;二、NVIC中断优先级管理详解三、问题汇总 前言 个人认为本篇文章是我作总结的最好的一篇&#xff0c;用自己的话总结出来清晰易懂&#xff0c;给小白看也能一眼明了&#xff0c;这就是写博客的意义吧…

【中间件篇-Redis缓存数据库03】Redis高级特性和应用(发布 订阅、Stream)

Redis高级特性和应用(发布 订阅、Stream) 发布和订阅 Redis提供了基于“发布/订阅”模式的消息机制&#xff0c;此种模式下&#xff0c;消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道( channel)发布消息&#xff0c;订阅该频道的每个客户端都可以收到该消息。 …

遇到问题[已解决]TypeError: ‘odict_keys‘ object is not subscriptable

背景 运行CPD代码时&#xff0c;由于源代码踊跃python2.7&#xff0c;但是我的是3.8出现报错 【Python3】【报错】- TypeError: ‘dict_keys‘ object is not subscriptable-CSDN博客 原因&#xff1a; 在Python3中&#xff0c;keys()方法不允许切片 VGG代码如下 解决办法: 就…