創作內容

2 GP

Unity資料蒐集─Delegate (Function Pointer)

作者:悠浪貓│2014-09-30 15:47:04│巴幣:4│人氣:2522
老實說我都不知道這到底是 Unity的資料蒐集 還是 C# 學習日誌 了

嘛,反正都是學習日誌就是啦~



C / C++ 的 Function Pointer,也就是C# 的Delegate

都是為了將「Function」當成物件丟來丟去而衍生的用法



為什麼我會需要呢?

因為有一個系統,我會利用它產生很多子系統

而我希望這些子系統會經過一個分配篩選,而分別從不同的管道對這位老爸爸進行回報

所以我要在產生這些子系統的同時,分派給他們回報的管道,也就是Function

那就會用到這個了,總不能我還一個一個去改這些子系統呀 ~ 那會累死


用法是像這樣

宣告一個delegate Function

public delegate bool Func(int nNumber);

這表示了我宣告一個叫作 Func 的Delegate函數,這函數可以丟進一個 INT 然後回傳 BOOL

然後我要丟進的 Function 可以這樣寫


public void TestFunction(Func oJudgeFunc)
{
   if ( oJudgeFunc (丟數字) )
        Debug.Log ( " 外部判定 Function 通過 " );
   e;se
        Debug.Log ( " 外部判定 Function 沒通過 " );
}


而 Call 的時候則這樣使用

先準備一個符合樣式的判定Funciton


public bool JudgeFuncA (int nNumber)
{
     return ( nNumber < 0 );
}


然後丟進去


TestFunction ( new Func(JudgeFuncA) );


大概類似這樣的用法,你可以丟好幾種不同的判定 Function 以取得不同狀況下的判定結果

可以由外部決定這個Function 內的關鍵判定是由哪個Function 來解決

就不需要自己一個一個手動去改



至於還有一個很重要的部分,子系統如何去承接著這個 Function 以保留多次使用呢?

關鍵在於這行

class A
{
        public delegate bool Func(int nNumber);
}

這行其實你就已經建立了一種新的 Type 就叫 Func

不過因為它是靜態宣告在A裡面,記得前面要加上 A. 當前墜

因此你只要把這個當成一種型態來宣告一個物件來承接就行了

例如

class B
{
        public A.Func oFuncContain= null;
        public void SetFunc (A.Func   oFunc)
        {
             oFuncContain = oFunc;
        }
}

這樣你之後只需要呼叫 oFuncContain() 就可以了!


__________________________________

Have a nice Day
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2609712
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

2喜歡★magicyeats 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:遊戲背景瞎掰 ─ 黑暗中... 後一篇:遊戲製作日誌 [ 14 ...

追蹤私訊切換新版閱覽

作品資料夾

daorliwh喜歡奇幻愛情的你
今晚九點!嚴肅騎士✕活潑少女的酸酸甜甜美食之旅《騎士勞倫的愛情之路》將登場!歡迎來見證!看更多我要大聲說昨天00:05


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】