👌

UnityEventで“リアクション盛り盛り”アクションゲームを作る

2025/02/11に公開

UnityEventで“リアクション盛り盛り”アクションゲームを作る

ゲームの盛り上げには多彩なリアクションが欠かせません。特にアクションゲームでは、ボタンを押すと同時にサウンドやエフェクト、アニメーションなどを一斉に起動したい場面が多いはずです。

そこで頼りになるのが、Unity標準のイベントシステムであるUnityEventです。カスタムUnityEventを使えば、キャラクターの動きやパーティクル生成などをまとめて一元管理することが可能になります。

本記事では、ボタン1つで複数の処理を呼び出すノウハウから大規模ゲームへ拡張しやすいイベント設計までをわかりやすく解説します。

Unity初心者でも最短5日で3D FPSが完成!今すぐ始める入門チュートリアルはこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a/viewer/0570af

UnityEventとは何か

イベントを登録して一括で実行

UnityEventはUnityのInspectorからでもコードからでもリスナー(処理)を追加し、イベントを発火したときにそれらすべてを実行できる仕組みです。ボタンのOnClickやコリジョンイベントなど、プロジェクト内での各種アクションをトリガーとして設定しやすいのが強みと言えます。

例えば、攻撃ボタンを押したときにキャラクターのアニメーション、効果音、エフェクトを同時に動かすといったことが容易に実現できます。複数の処理を一度に行う手法としてdelegateActionを使うケースもありますが、Inspector上で設定を完結できるUnityEventは、エンジニアだけでなくデザイナーやプランナーも触りやすい点がメリットです。

ボタン1つで複数の処理を同時に呼び出すノウハウ

Inspector上で設定できる利点

UnityEventは、コードだけでなくInspector上でリスナーを登録できるのが特徴です。例えばUIのボタンにはデフォルトでOnClickというUnityEventが用意されており、ここに複数のメソッドをアタッチしておけば、実行時にまとめて呼び出されます。システムメッセージの表示からキャラのアニメーション再生まで一括で実行できるため、演出面を手軽に強化できます。

UnityEventの簡単な登録例

csharp
using UnityEngine;
using UnityEngine.UI;

public class ButtonMultiAction : MonoBehaviour
{
[SerializeField] private Button myButton;

void Start()
{
    // コードでリスナーを追加
    myButton.onClick.AddListener(() => {
        Debug.Log("キャラ攻撃モーション開始");
        // 攻撃用のエフェクト再生などの処理
    });

    // Inspector上で他のリスナーを追加すると
    // ボタンが押されたときに全ての処理が同時に呼ばれる
}

}

コリジョンイベントにも応用できる

ボタン以外でも、何らかのトリガーが起きたときに複数処理を呼ぶのはアクションゲームの醍醐味です。例えば敵との衝突(コリジョン)イベントを検知して、演出を派手にしたい場合にもUnityEventが活用できます。コリジョンを検知するクラス内でUnityEventを用意し、衝突時にInvoke()すればOKです。

この記事内の画像には、コリジョンイベントをUnityEventで処理するサンプルコードが示されています。複数の処理を同時に呼び出すアイデアとして応用が利くので、ぜひチェックしてみましょう。

カスタムUnityEventでキャラアクションを一元管理

カスタムUnityEventとは

UnityのInspector上で簡単に呼び出せる通常のUnityEventとは別に、カスタムクラスを定義して独自の型を受け取るイベントを作成することもできます。たとえば、キャラクターのHPや座標情報など、イベントとセットで渡したいデータがある場合には、カスタムUnityEventを定義するのが便利です。

using UnityEngine;
using UnityEngine.Events;

[System.Serializable]
public class DamageEvent : UnityEvent<int> {}

public class Enemy : MonoBehaviour
{
    public DamageEvent onDamageTaken;

    public void TakeDamage(int damage)
    {
        // HPを減らすなどの処理
        onDamageTaken.Invoke(damage);
    }
}

キャラクターがダメージを受けたタイミングで、ダメージ量や演出情報をまとめて渡す形が取れます。Inspectorからリスナーをアタッチすれば、ダメージを受けた瞬間に音やエフェクトを同時に再生するなどの作り込みが簡単になります。

クラウド環境との連携も視野に

もし大規模ゲームを運営する上で、サーバーサイドの管理やクラウド上のアクションを組み合わせたい場合は、Unity公式の機能も活用できます。

https://docs.unity.com/ugs/ja-jp/manual/moderation/manual/custom-actions

クラウドコードを活用すれば、ゲーム内のイベントとサーバー側の処理を連携させることも可能です。たとえば、プレイヤーが特定のアイテムを入手したときに、サーバーに通知して実績を更新し、同時にレアエフェクトを再生するなどの拡張性を持たせられます。

大規模ゲームに拡張しやすいイベント設計のコツ

ScriptableObjectによる一元管理

キャラクターやスキルが増えていくと、イベントの数や連動処理も膨大になるものです。スクリプト内で全管理するより、ScriptableObjectを使ってデータをまとめる方法も検討してみましょう。Inspectorで扱いやすいデータを一括管理できるため、キャラごとに設定された攻撃イベントやスキル発動イベントなどを見通し良く整理できます。

ScriptableObjectを使ったスキル管理例
[CreateAssetMenu(menuName = "MyGame/SkillMaster")]
public class SkillMaster : ScriptableObject
{
    public string skillName;
    public UnityEvent onSkillTriggered;
}

ゲーム進行中にスキル発動を呼び出せば、スキル名やエフェクト、サウンドをまとめて再生できます。大規模プロジェクトであっても、ScriptableObjectを使えばアセットとして扱えるので管理しやすくなります。より詳しい実装例は、下記リンクも確認してみてください。

https://zenn.dev/ryuryu_game/articles/b98f42cd8bf261

記事内では、ScriptableObjectで多数のキャラクターやスキルを一元管理するノウハウが紹介されています。大規模開発時の効率化に役立つはずです。

チーム開発視点のポイント

  • イベント名やカスタムUnityEventの命名を明確に
    どんなタイミングで呼ばれるのかすぐにわかる名前を付けると、他の開発メンバーも設定しやすくなります。
  • メソッド内で複雑な処理を一括で行うより、あえて小分けしたメソッドをUnityEventに登録する
    後々追加・削除が簡単になるため、拡張しやすい設計になります。
  • ScriptableObjectと組み合わせると、イベント内容をアセットごとに分けやすい
    新しいキャラを増やす際など、Inspectorベースでデータを複製&編集できるので作業効率アップ。

まとめ

リアクション豊富なアクションゲームを作るには、ゲーム内のトリガーをいかに効率良く管理できるかが鍵です。UnityEventを駆使すれば、ボタンやコリジョンをトリガーに多彩な処理を一括発火させ、演出面を大幅にパワーアップできます。 さらに、カスタムUnityEventを用いてデータを受け渡す設計にすれば、大規模開発にも耐える柔軟な構成が可能になります。ScriptableObjectやクラウドサービスを組み合わせれば、キャラクターやスキル数が膨大になった場合でも拡張性は十分に確保できます。

イベントまわりを整理すると、開発効率や演出の幅も格段に上がります。ボタン1つで派手な連携演出を仕込む楽しさを、ぜひ味わってみてください。もし具体的な実装やイベント設計の詳細をさらに知りたい場合は、下記のリンクも参考にしてみましょう。

https://qiita.com/Yamara/items/334c3f4d2cb97f91bd4f
https://docs.unity.com/ugs/ja-jp/manual/moderation/manual/custom-actions
https://zenn.dev/ryuryu_game/articles/b98f42cd8bf261

これらをうまく活用すれば、ゲームの魅力がますます引き立つはずです。ぜひ次のプロジェクトで試してみてください。

この記事を読んでもっと実践したいと感じたあなたへ

Unity開発を効率よく進めるためには、実践的なスキルと仲間との交流が欠かせません。
そんな方におすすめのステップが、下記の3つです。

1. 有料教材「どこでもUnity教室」でゲーム制作を短期マスター

  • 5日でシンプルなFPS完成:初心者向けに要点を押さえたカリキュラム
  • C#や最新のInputSystem、FPS実装まで網羅:つまずきやすいポイントを先回りで解説
  • 購入特典:Discord招待+サンプルプロジェクトDLで、疑問や実装例を即確認

Unity初心者でも最短5日で3D FPSが完成!今すぐ始める入門チュートリアルはこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a/viewer/0570af

2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP

  • 初心者~中級者までOK:学習進度に合わせて質問や情報共有
  • 質問サポートが充実:わからないことを仲間や講師に即相談
  • 学習仲間と切磋琢磨:一緒に学ぶから続けやすい

Discordサーバー参加はこちら

https://discord.gg/5FwuKCacNy

3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート

  • コナラ総販売200件超:さまざまなUnity開発の依頼を対応
  • VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
  • ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数

ご相談・お問い合わせはこちら

https://coconala.com/users/1772507

Discussion