Unity监听某个值是否改变,c#数值监听器

Unity监听某个值是否改变,c#数值监听器

功能监听某个值的变化,当监听到变化之后执行对应的注册事件。
需要创建一个监听器对应,每监听一个值就要创建一个监听器对象,监听器是泛型,需要填写监听的类型。
创建监听器完毕后为监听器赋初值,
并添加监听方法,
不能监听自己创建对象的属性值
比如:

public class Student
{public int age = 0;public int tall;
}

不能监听age或者tall

using System;
using System.Collections.Generic;/// <summary>
/// 值变化监听器
/// </summary>
/// <typeparam name="T"></typeparam>
public class MonitorValueChange<T>
{// 定义一个事件,当值发生变化时触发public event Action<T> OnValueChanged;// 定义一个属性来存储和监听值的变化private T _value;public T Value{get { return _value; }set{if (!EqualityComparer<T>.Default.Equals(_value, value)){_value = value;// 触发事件OnValueChanged?.Invoke(_value);}}}// 提供一个方法来注册事件监听器public void RegisterListener(Action<T> listener){OnValueChanged += listener;}// 提供一个方法来注销事件监听器public void UnregisterListener(Action<T> listener){OnValueChanged -= listener;}
}
using UnityEngine;public class NewBehaviourScript : MonoBehaviour
{//创建监听器public MonitorValueChange<int> levelNotifier = new MonitorValueChange<int>();public MonitorValueChange<string> nameNotifier = new MonitorValueChange<string>();void Start(){// 初始化时传入需要监听的值levelNotifier.Value = 1;// 注册事件监听器levelNotifier.RegisterListener(HandleLevelChanged);//监听stringnameNotifier.Value = "name";nameNotifier.RegisterListener(NameChange);}void OnDestroy(){// 注销事件监听器levelNotifier.UnregisterListener(HandleLevelChanged);nameNotifier.UnregisterListener(NameChange);}// 事件处理方法private void HandleLevelChanged(int newLevel){Debug.Log("Level changed to: " + newLevel);}private void NameChange(string name){//方法中传递过来的内容是:namehello man Debug.Log("方法中传递过来的内容是:" + name);}void Update(){// 模拟值的变化if (Input.GetKeyDown(KeyCode.Space)){levelNotifier.Value++;nameNotifier.Value += "hello man ";}}     
}

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

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

相关文章

Python爬虫:代理ip电商数据实战

引言&#xff1a;数据访问管理引发的烦恼 作为一名Python博主&#xff0c;爬虫技能对于获取和分析数据至关重要&#xff0c;经常爬一下&#xff0c;有益身心健康嘛。爬虫技术对很多人来说&#xff0c;不仅仅是一种工具&#xff0c;更像是一种艺术&#xff0c;帮助我们从互联网…

Pytorch学习笔记——在GPU上进行训练

文章目录 1. 环境准备2. 导入必要库3. 加载数据集4. 定义简单的神经网络模型5. 检查和设置GPU设备6. 定义损失函数和优化器7. 训练模型8. 全部代码展示及运行结果 1. 环境准备 首先&#xff0c;确保PyTorch已经安装&#xff0c;且CUDA&#xff08;NVIDIA的并行计算平台和编程模…

org.springframework.context.annotation.ImportSelector的作用是什么?

org.springframework.context.annotation.ImportSelector 是 Spring 框架中一个非常有用的接口&#xff0c;它允许你根据条件动态地向 Spring 应用上下文中导入配置类。这对于开发模块化、可扩展且可配置的 Spring 应用来说非常有用。 如何使用 ImportSelector 创建 ImportSel…

Leetcode热题100 Day2

六、三数之和 这一题最关键的想法是把第二层嵌套和第三层嵌套合并为同一层嵌套&#xff0c;合并后即可使用两指针法。但是即使这样我在写的时候还是花了很多时间&#xff0c;一个是边界条件的处理&#xff08;尤其是连续有相同值的处理&#xff09;以及我发现了leetcode的编译…

用PyTorch从零开始编写DeepSeek-V2

DeepSeek-V2是一个强大的开源混合专家&#xff08;MoE&#xff09;语言模型&#xff0c;通过创新的Transformer架构实现了经济高效的训练和推理。该模型总共拥有2360亿参数&#xff0c;其中每个令牌激活21亿参数&#xff0c;支持最大128K令牌的上下文长度。 在开源模型中&…

java-双亲委派机制

Java虚拟机&#xff08;JVM&#xff09;中的类加载器&#xff08;Class Loader&#xff09;负责将类&#xff08;.class文件&#xff09;加载到JVM中&#xff0c;以便Java程序能够使用这些类。在JVM中&#xff0c;类加载器被组织成一种层次结构关系&#xff0c;这种层次结构关系…

vue3前端开发-小兔鲜项目-一些额外提醒的内容

vue3前端开发-小兔鲜项目-一些额外提醒的内容&#xff01;今天这一篇文章&#xff0c;是提醒大家&#xff0c;如果你正在学习小兔鲜这个前端项目&#xff0c;有些地方需要提醒大家&#xff0c;额外注意的地方。 第一个&#xff1a;就是大家在进入二级页面后&#xff0c;有一个分…

深度学习-7-使用DCGAN生成动漫头像(实战)

参考什么是GAN生成对抗网络,使用DCGAN生成动漫头像 1 什么是生成对抗网络 生成对抗网络,英文是Generative Adversarial Networks,简称GAN。 GAN是一种无监督的深度学习模型,于2014年首次被提出。该算法通过竞争学习的方式生成新的、且与原始数据集相似的数据。 这些生成…

公司培训总结:拒绝倦怠,探索工作中的自驱力

拒绝倦怠&#xff0c;探索工作中的自驱力 在快节奏、高压力的现代职场环境中&#xff0c;感到迷茫和缺乏动力是许多人的共同体验。工作中的倦怠感可能会导致生产力下降、职业发展受阻&#xff0c;甚至影响到个人的心理健康。然而&#xff0c;挖掘并激发我们的内在驱动力&#…

昇思25天学习打卡营第19天|生成式-DCGAN生成漫画头像

打卡 目录 打卡 GAN基础原理 DCGAN原理 案例说明 数据集操作 数据准备 数据处理和增强 部分训练数据的展示 构造网络 生成器 生成器代码 ​编辑 判别器 判别器代码 模型训练 训练代码 结果展示&#xff08;3 epoch&#xff09; 模型推理 GAN基础原理 原理介…

C#实战 | 天行健、上下而求索

本文介绍C#开发入门案例。 01、项目一&#xff1a;创建控制台应用“天行健&#xff0c;君子以自强不息” 项目说明&#xff1a; 奋斗是中华民族的底色&#xff0c;见山开山&#xff0c;遇水架桥&#xff0c;正是因为自强不息的奋斗&#xff0c;才有了辉煌灿烂的中华民族。今…

xmind--如何快速将Excel表中多列数据,复制到XMind分成多级主题

每次要将表格中的数据分成多级时&#xff0c;只能复制粘贴吗 快来试试这个简易的方法吧 这个是原始的表格&#xff0c;分成了4级 步骤&#xff1a; 1、我们可以先按照这个层级设置下空列&#xff08;后买你会用到这个空列&#xff09; 二级不用加、三级前面加一列、四级前面加…

#和private有什么区别?

先上代码&#xff1a; class Person {#salary: numberconstructor(salary: number, private name: string) {this.#salary salaryconsole.log(this.#salary) // 可以访问私有属性console.log(this.name) // 可以访问公共属性} }const person new Person(1000, 张三); // co…

MAT使用

概念 Shallow heap & Retained Heap Shallow Heap就是对象本身占用内存的大小。 Retained Heap就是当前对象被GC后&#xff0c;从Heap上总共能释放掉的内存(表示如果一个对象被释放掉&#xff0c;那会因为该对象的释放而减少引用进而被释放的所有的对象&#xff08;包括…

leetcode位运算(1684. 统计一致字符串的数目)

前言 经过前期的基础训练以及部分实战练习&#xff0c;粗略掌握了各种题型的解题思路。后续开始专项练习。 描述 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中&#xff0c;就称这个字符串是 一致字符串 。 请…

Python-for-Android:把你的Python应用打包为APK文件

Python-for-Android&#xff08;简称p4a&#xff09;是一个开发工具&#xff0c;它可以将Python应用打包成可以在Android设备上运行的二进制文件。它是基于开源框架Kivy开发的&#xff0c;旨在为开发者提供在移动设备上轻松运行Python应用的解决方案。 什么是Python-for-Androi…

MyBatis Plus 实现中文排序的两种有效策略

前言 在MyBatis Plus项目开发中&#xff0c;针对中文数据的排序需求是一个常见的挑战&#xff0c;尤其是在需要按照拼音或特定语言逻辑排序时。本文整合了两种有效的方法&#xff0c;旨在帮助开发者克服MyBatis Plus在处理中文排序时遇到的障碍&#xff0c;确保数据能够按照预…

【React】JSX 实现列表渲染

文章目录 一、基础语法1. 使用 map() 方法2. key 属性的使用 二、常见错误和注意事项1. 忘记使用 key 属性2. key 属性的选择 三、列表渲染的高级用法1. 渲染嵌套列表2. 条件渲染列表项3. 动态生成组件 四、最佳实践 在 React 开发中&#xff0c;列表渲染是一个非常常见的需求。…

【多模态】CLIP-KD: An Empirical Study of CLIP Model Distillation

论文&#xff1a;CLIP-KD: An Empirical Study of CLIP Model Distillation 链接&#xff1a;https://arxiv.org/pdf/2307.12732 CVPR 2024 Introduction Motivation&#xff1a;使用大的Teacher CLIP模型有监督蒸馏小CLIP模型&#xff0c;出发点基于在资源受限的应用中&…

【WPF开发】控件介绍-button(按钮)

基本介绍 按钮&#xff08;button&#xff09;控件的作用 按钮控件&#xff08;Button&#xff09;是用户界面&#xff08;UI&#xff09;设计中最基本的元素之一&#xff0c;其主要作用包括&#xff1a; 触发操作&#xff1a;用户通过点击按钮来执行一个命令或触发一个事件&…