在unity中如何使用delegate

總結下使用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);

///
/// 輸出中文名字
///
public void DebugNameOfChina(string str)
{
Debug.Log("中文名字:" + str);
}

///
/// 輸出英文名字
///
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");
}
}

}

更多unity2018的功能介紹請到paws3d學習中心查找。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章