別のオブジェクトのスクリプトを実行できるActionとUnityEventについて使い方をまとめます。


簡単な違い

どちらも他のオブジェクトをスクリプトを保持し、そのメソッドを呼び出すことができる点は同じですが、下記のような違いがあります。

Action
・C#言語のデリゲートの一種
・多少早い。

UnityEvent
・Unityの独自のイベントシステムでUnityエディター内で簡単に操作可能。
・複数のメソッドを登録し、実行できる。

個人的にUnityEventはエディター上で簡単に操作できたので、気に入ってます。

Actionのスクリプト例

Actionを使用するためには下記のusingディレクティブを追加する必要があります。

using System;

Actionはソース上で登録したメソッドを他でも使えるようにできます。

public class MyClass : MonoBehaviour
{
    public Action myAction;

    private void Start()
    {
        // Actionを設定する
        myAction = MyMethod;
        
        // Actionを実行する
        myAction.Invoke();
    }

    private void MyMethod()
    {
        Debug.Log("MyMethodが呼ばれました");
    }
} 

UnityEventのスクリプト例

UnityEventを使用するためには下記のusingディレクティブを追加する必要があります。

using UnityEngine.Events;

UnityEventはソース上でUnityエディター上で登録したメソッドを他でも使えるようにできます。

public UnityEvent MyEvent;
public void ButtonClick()
{
    MyEvent.Invoke();
}

上記のように UnityEvent を public で定義すると、インスペクターに設定できるような項目が現れます。

「+」ボタンを押すことで、オブジェクトやスクリプトを設定できるようになります。
「No Function」となっている部分からメソッドを指定することもできます。