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ごと異なるので、確認する必要あり。