2019年12月2日 星期一

Unity內C#的Event使用方式

C語言有很多實作功能我在過往寫專案時都不會使用到,就像你有一台手機但大部分的附屬功能平常不需要用到一樣,因此自然就沒也特別去注意。但以後也許會有需要用到,還是先研究一下做個記錄比較好。

會用Event的情況通常是我在和其他SDK等做整合時,都已經有那些SDK準備好的Event可直接註冊使用,因此不需要了解那些Event是怎麼生成的;而這邊記錄的是完全無中生有,包含Event的生成、註冊和使用,這樣以後就可以在自己的程式自己來了。

以下是簡單的創造一個Event並來使用:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class ZZZ : MonoBehaviour
{
    class TypeEventArgs : EventArgs
    {
        public float x = 0;
        public float y = 0;
    }

    private event EventHandler eventHandler;
    private TypeEventArgs tempEventArgs = new TypeEventArgs();

    void Start()
    {
        this.eventHandler += ReceiveData;
    }

    void Update()
    {
        tempEventArgs.x += Time.deltaTime;
        tempEventArgs.y += 2 * Time.deltaTime;

        eventHandler(this, tempEventArgs);
    }

    public void ReceiveData(System.Object sender, EventArgs e)
    {
        Debug.Log(Mathf.FloorToInt((e as TypeEventArgs).x) + " = " + Mathf.FloorToInt((e as TypeEventArgs).y));
    }
}

我做了一個Event,然後觸發此Event的情況是每個Frame時,會顯示一個累加時間和其兩倍的時間值。因此觸發條件便可因應各種需要,例如點擊一個按鈕時、用USB連接的Arduino傳過來資料時、或是有預料之中的錯誤發生時等。就可用Event的形式來加以對應。

沒有留言:

張貼留言