当前位置:   article > 正文

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

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

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

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

public class Student
{
    public int age = 0;
    public int tall;
}
  • 1
  • 2
  • 3
  • 4
  • 5

不能监听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;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
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 ";
        }
    }     
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号