文章出處

今天無意間讀到大神寫的代碼,看到了Invoke函數,于是產生興趣。后來才明白自己要學習的東西還有很多。

下面講用法。

Invoke是延時調用函數,在用Invoke函數之前需要引入命名空間using UnityEngine.Events;

1.Invoke("MethodName",2)

這個比較簡單,寫在c#腳本中,意為 兩秒之后調用一次,MethodName方法。

2.InvokeRepeating("MethodName",1,2)

這個方法就是多次調用Invoke,即理解為一秒后,每隔兩秒調用MethodName方法。

3.CancelInvoke("MethodName")

取消MethodName方法的調用。

直接上代碼看更加直觀。

 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEngine.Events;
 4 
 5 public class InvokeTest : MonoBehaviour {
 6     public GameObject Prefabs;
 7     private Vector3 v3;
 8     public int i = 5;
 9     // Use this for initialization
10     void Start () {
11         v3 = new Vector3(0, 0, 0);
12         Invoke("TestIns", 1);
13         //InvokeRepeating("TestIns", 2, 1);      //調用InvokeRepeating時候解開
14     }
15     
16     // Update is called once per frame
17     void Update () {
18         if (v3.x == 20) CancelInvoke("TestIns");
19     }
20 
21     void TestIns() {                      
22         //v3.x += i;                    //調用InvokeRepeating時候解開
23         Instantiate(Prefabs,v3,Quaternion.identity);
24     }
25 
26 }

以上代碼,分別是Invoke方法,InvokeRepeating方法,CancelInvoke方法的使用。

 

Invoke還有一個用法就是可以激活UnityEvent。

下面是例子。

 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEngine.Events;
 4 
 5 public class TestLoader : MonoBehaviour {
 6     [SerializeField]
 7     protected UnityEvent onLoad = new UnityEvent();
 8     [SerializeField]
 9     protected UnityEvent unLoad = new UnityEvent();
10     // Use this for initialization
11     void Start () {
12         Load();
13         UnLoad();
14     }
15     
16     // Update is called once per frame
17     void Update () {
18     
19     }
20 
21     [ContextMenu("Load")]
22     public void Load() {
23         onLoad.Invoke();
24     }
25 
26     [ContextMenu("unLoad")]
27     public void UnLoad() {
28         unLoad.Invoke();
29     }
30 }

這里有兩個序列化的UnityEvent,可能看代碼不是很直觀,直接上圖。

      

 

是不是感覺很眼熟。對就是,像我們經常看到的Button下邊的OnClick其實就是這種東西。

我們為這個東西掛上我們自己的測試腳本。

但是這時候我們想要調用測試腳本的方法了,這時候就用到了Invoke。

這里會自動調用UnityEvent下的腳本的指定方法。

測試腳本的代碼如下。

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class onLoadScripts1 : MonoBehaviour {
 5     public void systemLoadMessage() {
 6         Debug.Log("=======WhiteTaken=======");
 7     }
 8 
 9     public void systemLoadMessage(int i) {
10         Debug.Log("=====WhiteTaken:" + i + "======");
11     }
12 }
13 
14 using UnityEngine;
15 using System.Collections;
16 
17 public class onLoadScripts2 : MonoBehaviour {
18     public void systemLoadLog() {
19         Debug.Log("--------WhiteTaken----------");
20     }
21 }
22 
23 using UnityEngine;
24 using System.Collections;
25 
26 public class unLoadScripts : MonoBehaviour {
27     public void systemUnLoad(string name) {
28         Debug.Log("===----+ "+name+"卸載:-----=====");
29     }
30 }

運行以后我們可以看到打印結果。

 

Invoke的其他用法,還沒怎么用到,歡迎大家對我提出意見。有錯誤我會直接修改。

今晚繼續學習單例模式。 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()