public class _5_1ValueChangeEvent<T>{ //利用事件监听某一值的变化 public delegate void Handler(T newValue); public Handler handler; public void setValue(Handler handler,T value) { if (defultValue.Equals(value)) return; handler?.Invoke(value); defultValue = value; } public event Handler eventHandler; private T defultValue; //public T Value //{ // get { return defultValue; } // set // { // //如果默认值与外部监听的值 相等 则跳过 // if (defultValue.Equals(value)) return; // //不等 则Invoke执行该事件的委托(OnVariableChange)的所有方法 此处value为委托的参数 // //?为一个C#的简化操作,存在,则直接调用委托 // eventHandler?.Invoke(value); // defultValue = value; // } //}}
public class _5_2ValueCh : MonoBehaviour{ _5_1ValueChangeEvent<bool> value = new _5_1ValueChangeEvent<bool>(); void Start() { //value.eventHandler += valueChange; } void Update() { value.setValue(valueChange, Input.GetMouseButton(0)); // value.Value = Input.GetMouseButton(0); } void valueChange(bool value) { if (value == true) Debug.Log("5-2-------ValueChanged"); if (value == false) Debug.Log("5-2-------false"); }}