創作內容

11 GP

【筆記】建構、解構及event運用 & 一些細節

作者:樂小呈│2019-12-25 18:58:43│巴幣:22│人氣:398

建構、解構及event運用

>--建構、解構--<

public class ClassA
{
//建構子
    public ClassA()
    {
    }

//解構子
    ~ClassA()
    {
    }
}

{
    object obj = new object; <= 建構

} <= 解構(之後都用不到時)


>--實例,工廠與控制中心--<
public class FactoryConsole
{

    public static event Action OperationAllFactory;
    public static event Action StopAllFactory;

    Factory factory001 = new Factory();
    Factory factory002 = new Factory();
    Factory factory003 = new Factory();
    Factory factory004 = new Factory();

    public void StartAllFactory()
    {
        OperationAllFactory.Invoke();
    }
    public void StopAllFactory()
    {
        StopAllFactory.Invoke();
    }
}

public class Factory
{
    bool isOperation = true;

    public Factory()
    {
    //在建構時先把事件註冊好
    FactoryConsole.OperationAllFactory += StartOperation;
    FactoryConsole.StopAllFactory += StopOperation;
    }

    public void StartOperation()
    {
        isOperation = true;
    }
    public void StopOperation()
    {
        isOperation = false;
    }

    ~Factory()
    {
        //在解構時取消註冊所有事件(即使可能取消過了),以避免Invoke event時可能的錯誤
        FactoryConsole.OperationAllFactory -= StartOperation;
        FactoryConsole.StopAllFactory -= StopOperation;
    }
}

一些細節
GetSet可以直接添加判斷式
private object obj;
public object Obj { get => obj; set { if (value != null) obj = value; } }

transform是 { get; }
transform等同於 GetComponent<Transform>();
所以每禎調用的話會很吃效能

簡寫if(object != null) { object.Function(); }
可以簡寫成 object?.Function();

如果你無法預期一個Coroutine需要執行多久(禎),但你需要在他執行完後做某件事,你可以丟一個委派當輸入
IEnumerator WaitRandomSecond(System.Action callback)
{
    float duration = UnityEngine.Random.Range(1f, 3f);
    yield return new WaitForSeconds(duration);
    callback?.Invoke();
}

清除event
用迴圈取出已註冊的事件,一個一個取消
foreach(Delegate d in FindClicked.GetInvocationList())
{
    FindClicked -= (FindClickedHandler)d;
}
可以使用 = null 來清除,但不建議

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

相關創作

同標籤作品搜尋:程式|筆記

留言共 6 篇留言

棋醉
明明都是用unity 但我完全看不懂orz
多年過去我還是只會用if 跟for

12-25 19:48

樂小呈
這個筆記算是篇C#的,而且event也不容易接觸到(但還蠻重要的)12-25 19:58
樂小呈
我是因為剛好有人教我,不然這些東西我也自學不來12-25 19:58
樂小呈
不懂沒關C,這都只是工具,只要找到適合自己的工具就行了! 加U12-25 19:58
蒼天落葉
這些還是等我學到的時候在看好了[e26]

12-25 20:16

樂小呈
話說你是讀什麼的啊? 好像沒聽你說過[e12]12-25 20:20
蒼天落葉
我讀資訊管理系,有時候興趣也會去旁聽互動是遊戲設計的課[e34]

12-25 20:25

樂小呈
完來如此[e19],那遊戲設計的課都是在講什麼啊?12-25 20:30
蒼天落葉
Unity的東西,有教做大自然場景,導入水、草地、植物跟地皮等,還有教導入一個動物,然後讓動物可以在你做的場景裡走、跑、停、攻擊之類

12-25 20:33

樂小呈
了解~ 感謝~12-25 20:35
I2OI3
我覺得我還是專心做企劃就好了......

12-25 22:33

樂小呈
沒關西[e3],就算不用event還是能做遊戲12-25 22:43
樂小呈
但event好像還蠻方便的[e1]12-25 22:43
風格A
從建構子開始學阿~ 加油XD

12-26 08:48

樂小呈
學好了(゚∀。)12-26 09:35
我要留言提醒:您尚未登入,請先登入再留言

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

前一篇:【筆記】事件系統 (ev... 後一篇:【傳案】 Drop Th...

追蹤私訊切換新版閱覽

作品資料夾

qazxc1999愛插畫或登山的朋朋
久沒發文,達人都掉了,最近出了登山主題的畫冊,有興趣歡迎看看唷。看更多我要大聲說昨天21:43


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

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