コード生成とメンテナンス
最高のパフォーマンスと完璧なUnityインスペクターへの統合を実現するために、Game Event System は特定のデータ型に対応した具体的なC#クラスを利用します。
GameEvent<T> は強力ですが、Unityのインスペクター(UnityEvent)はジェネリック型を直接シリアライズすることができません。このツールセットは、これらのラッパークラスの作成を自動化し、ボイラープレートコードを一行も書くことなく、カスタムデータ型(構造体、クラス、列挙型)をインスペクター上でネイティブに表示できるようにします。
🚀 ツールへのアクセス
これらのユーティリティは Game Event System 内に配置されており、以下の方法でアクセスできます:
システムダッシュボードから:
Game Event System Window → "Generate/Clean Game Event Code" または "Clean All Game Event Code" をクリック

📂 アーキテクチャ
ツールを使用する前に、コードがどこに保存されるかを理解しておくことが重要です。システムは、プラグインをアップグレードしても生成されたファイルが失われないよう、コアロジックとユーザーデータを厳密に分離しています。
Assets/
├── 📁 TinyGiants/ # [コアロジック] 変更不可のプラグインルート
│ └── 📁 GameEventSystem/
│
└── 📁 TinyGiantsData/ # [ユーザーデータ] 生成されたコンテンツの保存場所
└── 📁 GameEventSystem/
└── 📁 CodeGen/ # 💾 自動生成されたC#クラス
├── 📁 Basic/ # 🛡️ プリミティブ型(システム必須ファイル)
└── 📁 Custom/ # 💾 カスタム型(ツールによって管理)
プロジェクトディレクトリ全体の構造について詳しく理解するには、前の章の プロジェクト構造 を参照してください。
TinyGiantsData/GameEventSystem/CodeGen/Basic フォルダには、必須のシステム型(Int, Float, Bool, Stringなど)が含まれています。
このフォルダ内のファイルを手動で削除したり修正したりしないでください。
誤って Basic フォルダを削除したり、システムが基本型(Int32GameEventなど)の欠落を報告した場合は、環境を自己修復できます。
- Game Event System (
Tools > TinyGiants > Game Event System) を開きます。 - ウィンドウ上部の Initialize Event System ボタンをクリックします。
- システムが以下を実行します:
- ディレクトリ構造の再作成。
- すべての欠落している基本型コードの再生成。
📝 生成されたコードの理解
特定の型(例:intやカスタムの DamageInfo 構造体)に対してコードを生成すると、ツールは2つの重要な部分を含むファイルを作成します:
- イベントクラス:
GameEvent<T>を継承した具体的なラッパー(例:Int32GameEvent)。 - バインディングフィールド:
GameEventManagerの partial クラス拡張。これによりUnityEvent<T>フィールドが追加され、インスペクターがリフレクションを介してリスナーをバインドできるようになります。
例:基本型 (Int32)
// =============================================================
// BASIC GAME EVENT - AUTO GENERATED
// =============================================================
using UnityEngine;
using UnityEngine.Events;
namespace TinyGiants.GameEventSystem.Runtime
{
// 1. ScriptableObject クラス
public class Int32GameEvent : GameEvent<int> { }
// 2. インスペクターバインディング
public partial class GameEventManager
{
public partial class EventBinding
{
[HideInInspector]
public UnityEvent<int> Int32GameEventAction;
}
}
}
例:カスタム送信元(Sender)型
**送信元(Sender)と引数(Arguments)**の両方を持つイベントの場合:
// =============================================================
// CUSTOM SENDER GAME EVENT - AUTO GENERATED
// =============================================================
using UnityEngine;
using UnityEngine.Events;
namespace TinyGiants.GameEventSystem.Runtime
{
// 1. ScriptableObject クラス
public class GameObjectDamageInfoGameEvent : GameEvent<UnityEngine.GameObject, DamageInfo> { }
// 2. インスペクターバインディング
public partial class GameEventManager
{
public partial class EventBinding
{
[HideInInspector]
public UnityEvent<UnityEngine.GameObject, DamageInfo> GameObjectDamageInfoGameEventAction;
}
}
}
⚡ コードジェネレーターツール
Game Event Code Generator はタブ形式のインターフェースを備えており、シンプルな単一引数イベントと複雑な送信元・引数付きイベントを切り替えることができます。どちらのモードもバッチキューイングをサポートしており、複数の型を設定して一度に生成することが可能です。
- 単一引数 (Single Parameter)
- 送信元付き (With Sender)

単一のデータペイロードを持つイベント(例:GameEvent<float> や GameEvent<MyClass>)には、このモードを使用します。
- クイック追加 (Quick Add): ドロップダウンを使用して、標準的なC#型(Double, Long, Vector3など)を素早く追加します。
- カスタム型の検索: プロジェクト内のクラス、構造体、列挙型の名前を入力して検索します。
- キューシステム: Add をクリックして、型を「Selected Queue(選択済みキュー)」に移動します。
- 一括生成: 緑色の Generate Code(s) ボタンをクリックすると、キューに入れられたすべての型のファイルが同時に作成されます。

誰がイベントをトリガーし、何が起きたか(例:Player が DamageInfo を送信した)を知る必要があるイベントには、このモードを使用します。
- 送信元(Sender)型の選択: 通常は
GameObjectや特定のスクリプト(例:PlayerController)を選択します。 - 引数(Argument)型の選択: ペイロードデータ(例:
DamageInfo)を選択します。 - ペアを追加: 特定の組み合わせ(例:
GameObject→DamageInfo)を作成し、キューに追加します。 - 一括生成: 定義されたすべてのペアを一回の操作で生成します。
"Generate" をクリックすると、Unityはスクリプトの再コンパイルを開始します。コンパイル終了後、新しいイベントタイプが Create Asset Menu および Event Editor ですぐに利用可能になります。
🧹 コードクリーナーツール
プロジェクトが進むにつれて、古い構造体を削除したりコードをリファクタリングしたりすると、未使用の GameEvent クラスが残ることがあります。Code Cleaner はジェネレーターのインターフェースをミラーリングしており、不要になったファイルを安全にフィルタリングして一括削除できます。
このツールは Custom フォルダのみ (TinyGiantsData/.../Custom) を対象とします。システムの整合性を守るため、Basic フォルダのファイルを表示したり削除したりすることはありません。
- 単一引数 (Single Parameter)
- 送信元付き (With Sender)

生成されたすべてのカスタム GameEvent<T> ファイルをリスト表示します。
- 検索とフィルタリング: 型名でファイルを検索します(例:「Damage」と検索すると
DamageInfoGameEvent.csが見つかります)。 - すべて選択 / 解除: 大規模なリストを素早く管理します。
- 複数選択: 個別のファイルにチェックを入れるか、「Select All」を使用します。
- 削除: 赤色の Delete All Selected Files ボタンを押すと、チェックされたすべての項目の
.csファイルと対応する.metaファイルが削除されます。

生成されたすべてのカスタム GameEvent<Sender, Args> ファイルをリスト表示します。
- 高度なフィルタリング: 送信元(Sender)名、または引数(Argument)名で検索できます。
- ファイルの確認: 各ファイルの横にある オブジェクトアイコン 📦 をクリックすると、削除前にプロジェクトウィンドウでスクリプトをハイライト表示(Ping)できます(参照を再確認するのに便利です)。
- 一括削除: 複数の送信元イベント定義を一クリックで安全に削除します。
☢️ すべてクリーンアップ(リセット)
Clean All Game Event Code ボタンは「最終手段(Nuclear Option)」です。
- アクション:
TinyGiantsData/GameEventSystem/CodeGen/Custom内のすべてのカスタムファイルを削除します。 - 保護: Basic フォルダは維持されます。
- ユースケース: カスタムイベントをハードリセットしたい場合、または大量の型をリファクタリングして現在必要なものだけを再生成したい場合に使用します。