Unity3d监听值的变化

许多时候我们希望监听某个布尔值变化了之后会调用某方法

 

首先可以创建一个类

    public class EventListener
    {

        public delegate void OnBoolChangeDelegate(bool newVal);//也可以改成int等等
        public event OnBoolChangeDelegate OnVariableChange; //事件

        private bool m_boolean = false;
        public bool Boolean
        {
            get
            {
                return m_boolean;
            }
            set
            {
                if (m_boolean == value) return;
                if (OnVariableChange != null)
                    OnVariableChange(!m_boolean);
                m_boolean = value;
            }
        }
    }






    //或者使用泛型,更万能
    /*
    public class EventListener
    {

        public delegate void OnValueChangeDelegate(T newVal);
        public event OnValueChangeDelegate OnVariableChange;

        private T m_value;
        public T Value
        {
            get
            {
                return m_value;
            }
            set
            {
                if (m_value.Equals(value)) return;
                OnVariableChange?.Invoke(value);
                m_value = value;
            }
        }
    }
    */
    

 

使用方法如下

        private EventListener listenerTest;
        private void Start()
        {
            listenerTest = new EventListener();
            listenerTest.OnVariableChange += Test;
        }

        private void Update()
        {
            listenerTest.Value = Input.GetKey(KeyCode.W);
        }

        private void Test(bool value)
        {
            Debug.Log(value);
        }


随便挂到某个场景上的物体
然后点开始
按下W控制台会打印出true,松开会打印false

 

这样可以有效解耦,而且不仅限于只能绑定一种方法,想要绑定就+=,不想要就-=,谁用谁爽

 

有任何问题留言,如果有帮到你点个右边栏的赞!

你可能感兴趣的:(Unity3D)