總結下使用C#中的委托(delegate)吧,其實這個並不難,但是對於沒接觸過的人還是有點小問題的,現在我在這做一個簡單的例子來幫助大家對delegate的理解吧,想要更加加深對委托的理解,請度娘下吧,我就不在這丟人了,我也是百度后才對委托有了進一步的理解的!
我們在unity中先建一個腳本,取名為TestDelegate。我做的這個測試主要是點擊輸出中文名字按鈕來輸出中文名字,點擊英文名字來輸出英文名字,這里有2個函數,一個是輸出中文名字,還有一個就是輸出英文名字的,如果我們不用委托的話,想要實現這個函數的話,那我們就要使用判斷語句來實現吧(if else , switch)。現在用委托的話我們就不用寫判斷語句了,想我這樣的人,大部分代碼都是判斷語句,現在我看見if else, switch,都心煩啊,大神的代碼都很少出現這些呀,在其中也為我敲醒了一個警鍾了,還得好好加倍努力啊, 好了 現在我們來寫下簡單的代碼吧。如下
using UnityEngine; using System.Collections; public class TestDelegate : MonoBehaviour { //定義一個委托(格式是不是很類很像),用來指向我們某個函數。(c++里面的指針函數) //param參數是名字 private delegate void DebugString(string param); /// <summary> /// 輸出中文名字 /// </summary> public void DebugNameOfChina(string str) { Debug.Log("中文名字:" + str); } /// <summary> /// 輸出英文名字 /// </summary> public void DebugNameOfEnglish(string str) { Debug.Log("English Name:" + str); } //定義一個委托的變量事件 private DebugString handlerDebugString; void OnGUI() { if (GUILayout.Button("輸出中文名字")) { //我想輸出中文名字的話就給handlerDebugString 賦值成輸出中文名字的這個函數DebugNameOfChina handlerDebugString = DebugNameOfChina; handlerDebugString("何建春"); } else if (GUILayout.Button("Debug English Name")) { //我想輸出英文名字的話就給handlerDebugString 賦值成輸出中文名字的這個函數DebugNameOfEnglish handlerDebugString = DebugNameOfEnglish; handlerDebugString("Hejianchun"); } } }
好了 我們運行下,分別點擊按鈕,看看unity的Console台輸出什么吧,截圖如下:
就是這樣簡單呀。不知道大家有沒有看明白我的意思。 其實委托還有+=和—+呢,我相信不知道委托的同學,大家在百度后也知道了。好了我們再來使用—+,—=來做個實驗,將上面代碼改成如下:
using UnityEngine; using System.Collections; public class TestDelegate : MonoBehaviour { //定義一個委托(格式是不是很類很像),用來指向我們某個函數。(c++里面的指針函數) //param參數是名字 private delegate void DebugString(string param); /// <summary> /// 輸出中文名字 /// </summary> public void DebugNameOfChina(string str) { Debug.Log("中文名字:" + str); } /// <summary> /// 輸出英文名字 /// </summary> public void DebugNameOfEnglish(string str) { Debug.Log("English Name:" + str); } //定義一個委托的變量事件 private DebugString handlerDebugString; void Start() { //給委托對象賦值 handlerDebugString = DebugNameOfChina; handlerDebugString("何建春"); Debug.Log("................................"); //給委托對象再加一個事件,叫多路廣播 handlerDebugString += DebugNameOfEnglish; handlerDebugString("Hejianchun"); Debug.Log("................................"); //給委托對象減去一個事件 handlerDebugString -= DebugNameOfChina; handlerDebugString("Hejianchun"); } }
大家猜猜上面的結果吧,我們來運行下,看下結果,有沒有別猜中。
看看吧,這就是委托的神奇之處,我覺得大家最容易猜錯的是第二條,沒想到它會輸出2條信息吧,其實這就是委托變量包含了一個初始值和我們后來的賦值的原因引起的,到后來我們又減去了一個事件,這才和原始一樣。大家如果沒看懂,我建議還是去百度吧。覺得這和unity3d枚什么關系,還是C#的知識。
如需轉載,還望表明出處,謝謝......