UnityEvent を使ったイベント登録入門チュートリアル – EventDispatcher と EventReceiver の連携(int 型引数付き)
この資料では、初めは単なるメソッド定義から始め、シーン開始時に呼び出す方法、そして最終的に UnityEvent を利用して異なる GameObject にアタッチされたスクリプトのメソッドへ int 型の引数をコードで渡す手順を解説します。
主に以下の 2 つのスクリプトと、それぞれをアタッチする 2 つの GameObject を使用します。
- EventDispatcher.cs
(イベント発行側のスクリプト。インスペクター経由でメソッドを登録)
→ アタッチする GameObject の名称:EventSender - EventReceiver.cs
(イベント受信側のスクリプト。イベント発行時に処理を受け取る)
→ アタッチする GameObject の名称:EventListener
1. 初めに:単なるメソッドの定義(引数なし)
まずは、DisplayGreeting()
というメソッドを定義しただけの状態です。この段階ではメソッドは存在するものの、どこからも呼び出されないため実行(発行)されません。
using UnityEngine;
public class EventDispatcher : MonoBehaviour
{
// 「こんにちは、世界!」を表示するメソッド(定義のみ)
void DisplayGreeting()
{
Debug.Log("こんにちは、世界!");
}
}
ポイント
この状態では、単にメソッドが存在するだけで、実行(発行)されることはありません。

2. Start() からのメソッド呼び出し(引数なし)
次に、Start()
メソッド内で DisplayGreeting()
を呼び出すようにコードを変更します。これにより、シーン開始時にメソッドが自動的に実行され、コンソールに「こんにちは、世界!」が出力されます。
using UnityEngine;
public class EventDispatcher : MonoBehaviour
{
void Start()
{
// シーン開始時に DisplayGreeting() を呼び出す
DisplayGreeting();
}
void DisplayGreeting()
{
Debug.Log("こんにちは、世界!");
}
}
ポイント
Start()
は MonoBehaviour の初期化メソッドです。- シーン開始と同時に
DisplayGreeting()
が実行され、コンソールにメッセージが表示されます。

3. UnityEvent を使ってインスペクターから呼び出す(引数なし)
次に、UnityEvent を利用して、インスペクター上からメソッドを登録・実行できるように変更します。
以下のコードでは、greetingEvent
にインスペクターから登録されたメソッドが、Start()
時に発行されます。
using UnityEngine;
using UnityEngine.Events;
public class EventDispatcher : MonoBehaviour
{
// インスペクター上でメソッドを登録可能にする UnityEvent(引数なし)
public UnityEvent greetingEvent;
void Start()
{
// インスペクターで登録された全てのメソッドを発行する
greetingEvent.Invoke();
}
// インスペクターから呼び出し可能な public メソッド
public void DisplayGreeting()
{
Debug.Log("こんにちは、世界!");
}
}
ポイント
public UnityEvent greetingEvent;
により、インスペクター上でイベントにメソッドを追加できるようになります。- EventSender のインスペクターから +ボタン をクリックし、自分自身(EventDispatcher)を登録、ドロップダウンから
DisplayGreeting()
を選択します。

4. int 型引数を渡すためのコード更新
ここから、int 型の引数を渡す方法に変更します。
まずは、イベントの型を UnityEvent<int>
に変更し、メソッドも int 型の引数を受け取るように更新します。
また、Start()
内でイベント発行時に数値を渡します(例として 100 を渡します)。
using UnityEngine;
using UnityEngine.Events;
public class EventDispatcher : MonoBehaviour
{
// インスペクター上でメソッドを登録可能にする UnityEvent(int 型引数付き)
public UnityEvent<int> greetingEvent;
void Start()
{
// シーン開始時に、登録された全てのメソッドへ int 型引数 100 を渡して発行する
greetingEvent.Invoke(100);
}
// インスペクターから呼び出し可能な public メソッド(int 型引数付き)
public void DisplayGreetingWithInt(int value)
{
Debug.Log("EventSender より: " + value + " のメッセージ こんにちは、世界!");
}
}
ポイント
- イベントの型を
UnityEvent<int>
に変更することで、int 型の引数を渡せるようになります。Start()
でgreetingEvent.Invoke(100);
とすることで、数値 100 を引数として渡します。- メソッドも
DisplayGreetingWithInt(int value)
として定義し、受け取った数値をデバッグ表示します。

実行結果

5. 別の GameObject のスクリプトのメソッドも実行する(int 型引数付き)
次に、別の GameObject にアタッチされた EventReceiver.cs も、int 型の引数を受け取るように更新します。
EventReceiver.cs の作成
以下のコードで EventReceiver.cs
を作成します。
このスクリプトは、DisplayGreetingWithInt()
というメソッドを持ち、渡された数値を利用して別のメッセージをコンソールに出力します。
using UnityEngine;
public class EventReceiver : MonoBehaviour
{
// int 型引数を受け取るメソッド
public void DisplayGreetingWithInt(int value)
{
Debug.Log("EventListener よりご挨拶: " + value + " のメッセージ こんにちは、世界!");
}
}
ポイント
このスクリプトは、例えばシーン上に EventListener という名前の GameObject にアタッチしてください。

UnityEvent への登録手順(int 型引数付き)
- EventDispatcher.cs をアタッチした GameObject(EventSender)を選択します。
- インスペクター内の greetingEvent フィールドを展開します。
- すでに自分自身の
DisplayGreetingWithInt(int)
が登録されている場合、+ボタン をクリックして新たなスロットを追加します。 - 新たなスロットに、EventReceiver.cs をアタッチしている GameObject(EventListener)をドラッグ&ドロップします。
- ドロップダウンから
EventReceiver -> DisplayGreetingWithInt
を選択します。
実行時
シーン再生時に、greetingEvent.Invoke(100)
によって登録されている
- EventSender の
DisplayGreetingWithInt(int)
と- EventListener の
DisplayGreetingWithInt(int)
の両方が発行され、コンソールにそれぞれのメッセージが表示されます。(ここでは 100 が引数として渡されます)

実行結果

6. まとめ
- 単なるメソッド定義(引数なし)
- まずは
DisplayGreeting()
というメソッドを定義するだけの状態。
- まずは
- Start() から呼び出す(引数なし)
- シーン開始時に直接
DisplayGreeting()
を実行してメッセージを出力する方法を学習。
- シーン開始時に直接
- UnityEvent によるインスペクター登録(引数なし)
- コード変更なしで、インスペクターから任意のメソッドを登録し、発行可能にする方法を学習。
- int 型引数を渡すためのコード更新
- イベントの型を
UnityEvent<int>
に変更し、Invoke(100)
などで数値を渡す方法を習得。
- イベントの型を
- 他の GameObject のスクリプトのメソッドも実行(int 型引数付き)
- EventSender と EventListener の双方で、int 型引数付きのメソッド(DisplayGreetingWithInt)を登録することで、シーン再生時に引数付きで処理を連携させることができます。
この手順を通して、UnityEvent の基本的な使い方に加え、引数付きのイベント発行と受信の方法を理解し、実際のプロジェクトに柔軟に応用できるようになります。
ディスカッション
コメント一覧
まだ、コメントがありません