赞
踩
功能监听某个值的变化,当监听到变化之后执行对应的注册事件。
需要创建一个监听器对应,每监听一个值就要创建一个监听器对象,监听器是泛型,需要填写监听的类型。
创建监听器完毕后为监听器赋初值,
并添加监听方法,
不能监听自己创建对象的属性值
比如:
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); //监听string nameNotifier.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 "; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。