{"id":1817,"date":"2017-05-22T14:51:12","date_gmt":"2017-05-22T06:51:12","guid":{"rendered":"http:\/\/39.100.100.179\/?p=1817"},"modified":"2018-10-22T15:08:45","modified_gmt":"2018-10-22T07:08:45","slug":"%e5%b0%81%e8%a3%85timer%e8%ae%a1%e6%97%b6%e5%99%a8","status":"publish","type":"post","link":"http:\/\/www.u3d8.com\/?p=1817","title":{"rendered":"\u5c01\u88c5Timer\u8ba1\u65f6\u5668"},"content":{"rendered":"<p>\u8ba1\u65f6\u5668\u662f\u5f88\u5e38\u7528\u7684\u529f\u80fd\uff0c\u672c\u6587\u4e3b\u8981\u505a\u8ba1\u65f6\u5668\u7c7b\u7684\u5c01\u88c5\uff0c\u4f18\u5316\u591a\u6b21\u8c03\u7528\u6548\u7387\u3002<\/p>\n<p>\u4e0a\u4ee3\u7801\uff1a<\/p>\n<p>TimerEvent<\/p>\n<pre class=\"lang:c# decode:true \">using UnityEngine;\r\nusing System.Collections;\r\nusing System;\r\n\r\npublic class TimerEvent\r\n{\r\n    public string m_key = \"\";\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u91cd\u590d\u8c03\u7528\u6b21\u6570,-1\u4ee3\u8868\u4e00\u76f4\u8c03\u7528\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public int m_repeatCount = 0;\r\n    public int m_currentRepeat = 0;\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u662f\u5426\u5ffd\u7565\u65f6\u95f4\u7f29\u653e\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public bool m_isIgnoreTimeScale = false;\r\n    public TimerCallBack m_callBack;\r\n    public object[] m_objs;\r\n\r\n    public float m_interval;\r\n    public float m_currentTimer = 0;\r\n\r\n    public bool m_isDone = false;\r\n\r\n    public void Update()\r\n    {\r\n        if (m_isIgnoreTimeScale)\r\n        {\r\n            m_currentTimer += Time.unscaledDeltaTime;\r\n        }\r\n        else\r\n        {\r\n            m_currentTimer += Time.deltaTime;\r\n        }\r\n\r\n        if (m_currentTimer &gt;= m_interval)\r\n        {\r\n            m_isDone = true;\r\n        }\r\n    }\r\n\r\n    public void CompleteTimer()\r\n    {\r\n        CallBackTimer();\r\n\r\n        if (m_repeatCount &gt; 0)\r\n        {\r\n            m_currentRepeat++;\r\n        }\r\n        \r\n        if (m_currentRepeat != m_repeatCount)\r\n        {\r\n            m_isDone = false;\r\n            m_currentTimer = 0;\r\n        }\r\n    }\r\n\r\n    public void CallBackTimer()\r\n    {\r\n        if (m_callBack != null)\r\n        {\r\n            try\r\n            {\r\n                m_callBack(m_objs);\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                Debug.LogError(e.ToString());\r\n            }\r\n        }\r\n    }\r\n\r\n    public void ResetTimer()\r\n    {\r\n        m_currentTimer = 0;\r\n        m_currentRepeat = 0;\r\n    }\r\n}\r\n\r\npublic delegate void TimerCallBack(params object[] objs);<\/pre>\n<p>Timer<\/p>\n<pre class=\"lang:c# decode:true\">using UnityEngine;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\npublic class Timer\r\n{\r\n    public static List&lt;TimerEvent&gt; m_timers = new List&lt;TimerEvent&gt;();\r\n\r\n    public static void Init()\r\n    {\r\n        EventMgr.AddListener(EventType.Update, Update);\r\n    }\r\n\r\n    static void Update()\r\n    {\r\n        for (int i = 0; i &lt; m_timers.Count; i++)\r\n        {\r\n            TimerEvent e = m_timers[i];\r\n            e.Update();\r\n\r\n            if (e.m_isDone)\r\n            {\r\n                e.CompleteTimer();\r\n\r\n                if (e.m_isDone)\r\n                {\r\n                    m_timers.Remove(e);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static bool GetIsExistTimer(string key)\r\n    {\r\n        for (int i = 0; i &lt; m_timers.Count; i++)\r\n        {\r\n            var e = m_timers[i];\r\n            if (e.m_key == key)\r\n            {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static TimerEvent GetTimer(string key)\r\n    {\r\n        for (int i = 0; i &lt; m_timers.Count; i++)\r\n        {\r\n            var e = m_timers[i];\r\n            if (e.m_key == key)\r\n            {\r\n                return e;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u5ef6\u8fdf\u8c03\u7528\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u5f00\u59cb\u5ef6\u65f6&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent Register(float interval, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        return AddTimer(null, interval, 0, false, callBack, objs);\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u95f4\u9694\u4e00\u5b9a\u65f6\u95f4\u91cd\u590d\u8c03\u7528\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u5f00\u59cb\u5ef6\u65f6&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"repeatCount\"&gt;\u91cd\u590d\u8c03\u7528\u7684\u6b21\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent Register(float interval, int repeatCount, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        return AddTimer(null, interval, repeatCount, false, callBack, objs);\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u5ef6\u8fdf\u8c03\u7528 \u5ffd\u7565TimeScale\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u5f00\u59cb\u5ef6\u65f6&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"isIgnoreTimeScale\"&gt;\u662f\u5426\u5ffd\u7565\u65f6\u95f4\u7f29\u653e&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent Register(float interval, bool isIgnoreTimeScale, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        return AddTimer(null, interval, 0, isIgnoreTimeScale, callBack, objs);\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u5ef6\u8fdf\u8c03\u7528\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"key\"&gt;Timer\u7684\u540d\u5b57&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u5f00\u59cb\u5ef6\u65f6&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent Register(string key, float interval, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        return AddTimer(key, interval, 0, false, callBack, objs);\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u95f4\u9694\u4e00\u5b9a\u65f6\u95f4\u91cd\u590d\u8c03\u7528\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"key\"&gt;Timer\u7684\u540d\u5b57&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u95f4\u9694\u65f6\u95f4&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"repeatCount\"&gt;\u91cd\u590d\u8c03\u7528\u7684\u6b21\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent Register(string key, float interval, int repeatCount, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        return AddTimer(key, interval, repeatCount, false, callBack, objs);\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u5ef6\u8fdf\u8c03\u7528 \u5ffd\u7565TimeScale\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"key\"&gt;Timer\u7684\u540d\u5b57&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u5f00\u59cb\u5ef6\u65f6&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"isIgnoreTimeScale\"&gt;\u662f\u5426\u5ffd\u7565\u65f6\u95f4\u7f29\u653e&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent Register(string key, float interval, bool isIgnoreTimeScale, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        return AddTimer(key, interval, 0, isIgnoreTimeScale, callBack, objs);\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u95f4\u9694\u4e00\u5b9a\u65f6\u95f4\u91cd\u590d\u8c03\u7528 \u5ffd\u7565TimeScale\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"key\"&gt;Timer\u7684\u540d\u5b57&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u95f4\u9694\u65f6\u95f4&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"repeatCount\"&gt;\u91cd\u590d\u8c03\u7528\u7684\u6b21\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"isIgnoreTimeScale\"&gt;\u662f\u5426\u5ffd\u7565\u65f6\u95f4\u7f29\u653e&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent Register(string key, float interval, int repeatCount, bool isIgnoreTimeScale, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        return AddTimer(key, interval, repeatCount, isIgnoreTimeScale, callBack, objs);\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u6dfb\u52a0\u4e00\u4e2aTimer\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=\"interval\"&gt;\u95f4\u9694\u65f6\u95f4&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"repeatCount\"&gt;\u91cd\u590d\u8c03\u7528\u7684\u6b21\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"isIgnoreTimeScale\"&gt;\u662f\u5426\u5ffd\u7565\u65f6\u95f4\u7f29\u653e&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"key\"&gt;Timer\u7684\u540d\u5b57&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"callBack\"&gt;\u56de\u8c03\u51fd\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=\"objs\"&gt;\u56de\u8c03\u51fd\u6570\u7684\u53c2\u6570&lt;\/param&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n    public static TimerEvent AddTimer(string key, float interval, int repeatCount, bool isIgnoreTimeScale, TimerCallBack callBack, params object[] objs)\r\n    {\r\n        TimerEvent te = new TimerEvent();\r\n\r\n        te.m_key = key ?? te.GetHashCode().ToString();\r\n        te.m_currentTimer = 0;\r\n        te.m_interval = interval;\r\n        te.m_repeatCount = repeatCount;\r\n        te.m_isIgnoreTimeScale = isIgnoreTimeScale;\r\n\r\n        te.m_callBack = callBack;\r\n        te.m_objs = objs;\r\n\r\n        m_timers.Add(te);\r\n\r\n        return te;\r\n    }\r\n\r\n    public static void DestroyTimer(TimerEvent timer, bool isCallBack = false)\r\n    {\r\n        if (m_timers.Contains(timer))\r\n        {\r\n            if (isCallBack)\r\n            {\r\n                timer.CallBackTimer();\r\n            }\r\n\r\n            m_timers.Remove(timer);\r\n        }\r\n        else\r\n        {\r\n            Debug.LogError(\"Dont exist timer:\" + timer);\r\n        }\r\n    }\r\n\r\n    public static void UnRegister(string key, bool isCallBack = false)\r\n    {\r\n        for (int i = 0; i &lt; m_timers.Count; i++)\r\n        {\r\n            TimerEvent te = m_timers[i];\r\n            if (te.m_key.Equals(key))\r\n            {\r\n                DestroyTimer(te, isCallBack);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static void UnRegister(bool isCallBack = false)\r\n    {\r\n        for (int i = 0; i &lt; m_timers.Count; i++)\r\n        {\r\n            if (isCallBack)\r\n            {\r\n                m_timers[i].CallBackTimer();\r\n            }\r\n        }\r\n\r\n        m_timers.Clear();\r\n    }\r\n\r\n    public static void ResetTimer(TimerEvent timer)\r\n    {\r\n        if (m_timers.Contains(timer))\r\n        {\r\n            timer.ResetTimer();\r\n        }\r\n        else\r\n        {\r\n            Debug.LogError(\"Dont exist timer:\" + timer);\r\n        }\r\n    }\r\n\r\n    public static void ResetTimer(string key)\r\n    {\r\n        for (int i = 0; i &lt; m_timers.Count; i++)\r\n        {\r\n            var e = m_timers[i];\r\n\r\n            if (e.m_key.Equals(key))\r\n            {\r\n                ResetTimer(e);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n\r\n<\/pre>\n<p>\u6d4b\u8bd5\u4ee3\u7801\uff1a<\/p>\n<pre class=\"lang:c# decode:true \">\tvoid Start () {\r\n        Timer.Register(1, (param) =&gt; {\r\n            Debug.Log(\"\u8fd9\u662fTimer\u5ef6\u8fdf1\u79d2\u6267\u884c,,\u8fd8\u6709\u5f88\u591aTimer\u53c2\u6570\uff0c\u8be6\u89c1Timer\u7c7b\");\r\n        });\r\n\r\n\r\n        Timer.Register(\"timer_delay_test\", 2, 5, (param) =&gt; {\r\n            Debug.Log(\"\u8fd9\u662fTimer\u6bcf2\u79d2\u6267\u884c\u4e00\u6b21,\u6267\u884c5\u6b21,,\u8fd8\u6709\u5f88\u591aTimer\u53c2\u6570\uff0c\u8be6\u89c1Timer\u7c7b \u53c2\u6570\uff1a\" + param[0]);\r\n        }, \"abc\") ;\r\n    }<\/pre>\n<p>\u8f93\u51fa\u7ed3\u679c\uff1a<\/p>\n<p><img title=\"\u5c01\u88c5Timer\u8ba1\u65f6\u5668 - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" alt=\"\u5c01\u88c5Timer\u8ba1\u65f6\u5668 - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" loading=\"lazy\" class=\"alignleft size-full wp-image-1818\" src=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2018\/10\/QQ\u622a\u56fe20181022150605.jpg\" width=\"535\" height=\"196\" srcset=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2018\/10\/QQ\u622a\u56fe20181022150605.jpg 535w, http:\/\/www.u3d8.com\/wp-content\/uploads\/2018\/10\/QQ\u622a\u56fe20181022150605-300x110.jpg 300w\" sizes=\"(max-width: 535px) 100vw, 535px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8ba1\u65f6\u5668\u662f\u5f88\u5e38\u7528\u7684\u529f\u80fd\uff0c\u672c\u6587\u4e3b\u8981\u505a\u8ba1\u65f6\u5668\u7c7b\u7684\u5c01\u88c5\uff0c\u4f18\u5316\u591a\u6b21\u8c03\u7528\u6548\u7387\u3002 \u4e0a\u4ee3\u7801\uff1a T &hellip; <a href=\"http:\/\/www.u3d8.com\/?p=1817\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23],"tags":[371,372],"_links":{"self":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1817"}],"collection":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1817"}],"version-history":[{"count":1,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1817\/revisions"}],"predecessor-version":[{"id":1819,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1817\/revisions\/1819"}],"wp:attachment":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1817"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}