私もUnityを始めた頃、「関数を変数みたいに渡す」という概念に一度つまずきました。
ボタンを押したら処理を実行したい。
敵が倒れたらUIを更新したい。
そういう「あとから実行する処理」をつなぐのが、デリゲートやイベントの役割です。
難しく見えますが、UnityEventから触れると理解が早いです。
この記事では、delegateとActionの概要、UnityEventとの使い分け、ボタンクリックや死亡通知の具体例まで解説します。
実務で出会う場面に絞って整理します。
- デリゲートやActionという用語が抽象的で理解できない
- ボタンを押してもOnClickの処理が動かない
- UnityEventとActionのどちらを使えばいいか分からない
✨ この記事でわかること
- delegateとActionの基本
- UnityEventとの使い分け
- UIボタンのOnClick設定方法
- 敵の死亡通知でActionを使う例
- eventキーワードの意味
- 初心者でも理解できる解説
\プログラミング未経験でも大丈夫!まずは1本作り切ろう/
初心者が最初に選ぶならコレ
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。
憧れのアクションゲームに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。
3Dゲーム開発の入口はここ
ゼルダ風3Dアクションゲーム
の作り方講座
「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。
デリゲートとは何か
デリゲート(delegate)は、メソッドを参照して保持できる型です。
変数に数値や文字列を入れるように、メソッドを「後で呼ぶ処理」として登録できます。
public class GameManager : MonoBehaviour
{
public delegate void OnGameOverDelegate;
public OnGameOverDelegate onGameOver;
public void TriggerGameOver
{
Debug.Log("ゲームオーバー");
onGameOver?.Invoke;
}
}
onGameOver?.Invokeは、登録された処理があれば実行する、という意味です。
?はnullチェックの省略記法です。
Actionを使った短い書き方
毎回delegateを宣言するのは長いので、Actionを使うのが一般的です。
System名前空間の型なので、using System;を忘れないようにしましょう。
using System;
using UnityEngine;
public class ScoreManager : MonoBehaviour
{
public Action<int> onScoreChanged;
public void AddScore(int value)
{
onScoreChanged?.Invoke(value);
}
}
Actionは引数なし、Action<int>はintを1つ受け取る、Action<int, string>は2つ受け取る、という形で使います。
戻り値がある処理にはFuncを使いますが、イベント通知ではActionが多いです。
| 型 | 用途 | 例 |
|---|---|---|
| Action | 引数なし・戻り値なしの処理 | ゲームオーバー通知 |
| Action<T> | 引数1つの処理 | スコア変更通知(新しい点数を渡す) |
| UnityEvent | Inspectorから登録できるイベント | UIボタンのOnClick |
UnityEventとの使い分け
Unityには、Inspector上でドラッグ&ドロップで登録できるUnityEventもあります。
ボタンのOnClickはこれが代表例です。
using UnityEngine;
using UnityEngine.Events;
public class DoorSwitch : MonoBehaviour
{
public UnityEvent onDoorOpened;
public void OpenDoor
{
Debug.Log("ドアが開いた");
onDoorOpened?.Invoke;
}
}
使い分けの目安は次のとおりです。
- UnityEvent:Inspectorで非プログラマも設定したい、ボタン連携、演出のつなぎ
- Action/delegate:コードだけで完結、複雑な引数、パフォーマンスを気にする場面

UIボタンならUnityEvent、スクリプト同士の連携ならAction、と覚えておくと選びやすいです。
どちらも「後から実行する」という点は同じですよ。
ボタンクリックのイベント例
UIボタンは、コードを書かなくてもInspectorから処理を登録できます。
- STEP1Buttonを配置する
Canvas上にUI > Buttonを作成
- STEP2OnClickに登録する
ButtonのOnClickに、実行したいオブジェクトとメソッドをドラッグ
- STEP3Playで確認する
ボタンを押して、指定した処理が動くかテスト
コードから登録する場合は、次のように書きます。
using UnityEngine;
using UnityEngine.UI;
public class StartButton : MonoBehaviour
{
void Start
{
Button btn = GetComponent<Button>;
btn.onClick.AddListener(OnStartClicked);
}
void OnStartClicked
{
Debug.Log("ゲーム開始!");
}
}
AddListenerでメソッドを登録し、RemoveListenerで解除できます。
シーン切り替え時に解除を忘れると、二重登録の原因になるので注意しましょう。
敵の死亡通知でActionを使う
敵が倒れたらスコア加算やSE再生をしたい場面では、Actionが向いています。
using System;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public Action onDeath;
[SerializeField] private int hp = 30;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
onDeath?.Invoke;
Destroy(gameObject);
}
}
}
public class GameFlow : MonoBehaviour
{
void Start
{
Enemy enemy = FindObjectOfType<Enemy>;
enemy.onDeath += HandleEnemyDeath;
}
void HandleEnemyDeath
{
Debug.Log("敵撃破!スコア+100");
}
}
+=で登録、-=で解除します。
複数の処理を1つのイベントに登録できるのも、デリゲートの便利な点です。
C#イベント(event)キーワード
外部から勝手にInvokeされないよう、eventキーワードを付ける書き方もあります。
public event Action onDeath; // 外部から onDeath?.Invoke は呼べない // 登録(+=)と解除(-=)だけ可能
公開APIとしてイベントを渡すときは、event付きのActionにしておくと安全です。
自分のクラス内からだけInvokeする、というルールを守りやすくなります。
ラムダ式で短く登録する
Actionには、メソッド名の代わりにラムダ式を渡す書き方もあります。
void Start
{
ScoreManager score = GetComponent<ScoreManager>;
score.onScoreChanged += (newScore) =>
{
Debug.Log("スコア更新: " + newScore);
};
}
1行で済む処理ならラムダ式が便利です。
ただし、RemoveListenerや-=で解除するときは、同じ参照が必要になるため、長い処理は名前付きメソッドにしておく方が安全です。

最初はUnityEventのボタン連携から触って、慣れたらActionでスクリプト間連携、という順番がおすすめです。
いきなり全部理解する必要はありません。
よくあるつまずき
- 登録忘れ → +=やAddListenerを書いたか確認
- 二重登録 → Startが複数回走るとリスナーが増える。
解除するか1回だけ登録する - privateメソッドをInspector登録 → UnityEventから呼ぶメソッドはpublicが必要
- 破棄後の参照 → Destroyしたオブジェクトのイベントは解除する
「ボタンを押しても反応しない」ときは、OnClickのリストが空でないか、Time.timeScaleが0になっていないかも合わせて確認してください。
イベント設計では、「誰が通知するか(発火側)」と「誰が受け取るか(購読側)」を分けて考えると整理しやすくなります。
EnemyはonDeathを発火するだけ、GameFlowはHandleEnemyDeathでUI更新——この分担がデリゲートの基本的な使い方です。
Sceneをまたいで使う場合は、DontDestroyOnLoadしたGameManagerにイベントを集約するパターンもよく見ます。

デリゲートは「松竹梅の連携」みたいなもの。
ボタンが叩く、敵が倒れる、UIが更新される——順番に役割を分けてつないでいきましょう。
記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。
Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも迷わず進められる丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。
全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。
「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- アセットを使った実践的なゲーム開発手法が身につく
- 画像・動画・全ソースコード公開の充実したサポート
ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。
全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。
「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!
まとめ
デリゲートとActionは、メソッドを後から実行するための仕組みです。
UnityEventはInspector連携向け、Actionはコード中心の連携向け、と使い分けると整理しやすくなります。
ボタンクリックや敵の死亡通知は、ゲーム制作で最初に出会うイベントの代表例です。
UIボタンのOnClickから試し、慣れたらActionでスクリプト間をつないでみましょう。
イベント設計を含めて学びたい方は、Unity入門の森の講座で、実践的なゲーム制作と一緒に身につけられます。
今日はButtonのOnClickに、Debug.Logを1つ登録するところから始めてみてください。



コメント