C#监控值的改变触发事件(Set),于用计时器重新计时

主要受这篇文章启发感谢博主https://www.cnblogs.com/kidfruit/archive/2010/04/07/1706516.html

监控值的变化,主要是通过get set中的set来判断,set中可以加入逻辑,结合委托事件调用

以下是判断的参考代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {

    // Use this for initialization

    private int count = 0;
    public int Count
    {
        get
        {
            return count;
        }
        set
        {          
            if(value != count)//当值发生改变时
            {
                count = value;
                WhenMyValueChange();
            }
            count = value;
        }
    }

    public delegate void MyValueChanged(int Object);
    public event MyValueChanged OnMyValueChanged;

    public Test()
    {
        count = 0;
        OnMyValueChanged += new MyValueChanged( DoSomgThing);
    }

    void DoSomgThing(int num)
    {
        //do
        print( "成功调用到了"+ num );
    }

    private void WhenMyValueChange()
    {
        if(OnMyValueChanged != null)
        {
            OnMyValueChanged(count);
        }
    }

}

以上的写法很好用,但是要用就会发现,计时器一般是写在Update方法里面,通过Time.deltaTime来叠加计时(当然还有用协程的,这里不做讨论),如果是直接写在上面的DoSomThing方法中,也只是能做一次,不能像Update帧叠加,所以要对做点更改:

只需要在Set里判断即可

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class Test  {
    public float m_totalTime;     
    private float count = 0;
    public float Count
    {
        get
        {
            return count;
        }
        set
        {          
            if(value != count)
            {
                count = value;
                m_totalTime = 0;
            }
            count = value;
        }
    }


    public Test()
    {
        count = 0;
    }
}

在Update中调用

using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
    private Test m_test;
    void Start () {
        m_test = new Test();	
	}
	
	void Update () {
        Timer(m_test.Count);
	}


    void Timer(float time)
    {
        m_test.m_totalTime += Time.deltaTime;


        if(time >= m_test.m_totalTime)
        {
            Debug.Log("时间到");
        }
    }
}


你可能感兴趣的:(C#,Unity3D)