Unityのイベントについてのメモ

はじめに

Unityのイベントについてちゃんと理解していないので 勉強したり、テストコード書いてなんとなくわかったことをメモる

調べて分かったことを雑多にメモ

・イベントの定義の仕方

 public UnityEvent OnClickTestButton=new UnityEvent();

OnClickTestButtonという名前のイベントを定義。newしてインスタンス化が必要みたい。

・行いたい処理の登録と呼びかた

実際に行いたい処理はメソッドに書いてAddListener()をつかって登録する。 また、OnClickButton.Invoke()とすると代入したメソッドを呼べる。

TestVoid()をOnClickButtonに登録して、そのあとInvokeで呼ぶコードを書いてみる。

     void TestVoid()
    {
        Debug.Log("Test");
    }
    void Start()
    {
        OnClickTestButton.AddListener(TestVoid);
        OnClickTestButton.Invoke();
     }

・結果 TestVoidがちゃんと呼ばれていることが分かった。

引数ありのUnityEventについて

UnityEventは引数がないメソッドしか代入できない。 引数が必要な場合はUnityEvent<T>を継承したクラスを定義する必要がある。

 public UnityBoolEvent OnClickBoolTest = new UnityBoolEvent();

    public sealed class UnityBoolEvent : UnityEvent<bool>
    {
    //中身は記述の必要なし
    }

例えば上記のようにすると、Boolを引数にした関数を登録できるUnityBoolEventを使用できる。

UIに初めから実装されているEvent

例えばButtonクラスにはOnClickというUnityEventが初めから実装されている。 OnClickはInvokeでも呼べるが、Unity上でUIのボタンをクリックすることでも呼ばれる。 UIのEventはUnity上での決められた操作によって呼ばれる。

またOnClickは、引数と戻り値がないメソッドのみを登録できる。 これはEventごと異なるので、確認する必要あり。