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);
//监听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 ";
}
}
}