ゲームイベントファインダー
リファレンスファインダー (Reference Finder) は、アクティブなシーン全体をスキャンして、特定のゲームイベントを参照しているすべての GameObject、スクリプト、およびコンポーネントを特定する強力な診断ツールです。
このツールは、「このイベントを変更した場合、誰に影響が及ぶか?」 という重要な問いに答えます。
🚀 ツールへのアクセス
リファレンスファインダーは Game Event Editor から開くことができます。
Game Event Editor → イベント行の 🔍 アイコンをクリック
ウィンドウが開き、そのイベントに対するシーン内のすべての参照が表示されます。
🖼️ インターフェースモード
ウィンドウは、異なる調査ニーズに合わせて2つの表示モードをサポートしています。ツールバーのボタンを使用して切り替えることができます。
リストモード (Flat View)
すべての参照をシンプルでソート可能なリストとして表示します。

最適な用途: 全体の使用状況を素早く確認したり、パスや名前でソートしたりする場合。
グループモード (Script View)
参照を保持している スクリプトコンポーネント ごとにグループ化して表示します。

最適な用途: どの システム がこのイベントに依存しているかを把握する場合(例:5つの EnemyAI スクリプトと1つの GameManager が使用していることを確認するなど)。
切り替え: ツールバーの List / Grouped ボタンをクリックしてモードを切り替えます。
📊 ステータスインジケーター
各行は、参照しているオブジェクトの状態についてリアルタイムのフィードバックを提供します。
| アイコン | ステータス | 説明 |
|---|---|---|
| 🟢 | 有効 (Active) | GameObject は現在ヒエラルキーでアクティブです。イベントバインディングは有効な状態です。 |
| 🔴 | 無効 (Inactive) | GameObject が非アクティブです。有効化されるまで、イベントバインディングはトリガーされません。 |
📝 参照の詳細
各カラムは、すべての参照について詳細なコンテキストを提供します。
| カラム | 説明 |
|---|---|
| GameObject | シーン内のオブジェクト名 |
| Hierarchy Path | フルパス(例:Environment/Enemies/Grunt_01) |
| Script | イベントを参照している C# クラス名(例:PlayerHealth) |
| Type | コード内の変数名(例:onDeathEvent) |
このツールは リフレクション (Reflection) を使用して、MonoBehaviour 上のすべてのパブリックおよびプライベートフィールドをスキャンします。プライベートなシリアライズされたフィールドに隠れている参照も見つけ出すことができます。
🔍 検索とソート
検索バー: GameObject 名、ヒエラルキーパス、スクリプト名、またはフィールド名で入力して参照をフィルタリングします。部分一致をサポートしています。
ソート可能なカラム: カラムヘッダーをクリックしてソートします。もう一度クリックすると昇順/降順が切り替わります。
⚡ クイックアクション
右側の Actions カラムには、対象のオブジェクトに即座に移動するための3つの強力なナビゲーションツールが用意されています。
| ボタン | アイコン | アクション | ユースケース |
|---|---|---|---|
| Ping | 🔍 | ヒエラルキーで表示 | 選択を切り替えることなく、ヒエラルキーウィンドウでオブジェクトを点滅させて場所を示します |
| Focus | 📋 | インスペクターでフォーカス | オブジェクトを選択し、即座に インスペクター にフォーカスを合わせます。すぐにスクリプトを編集したい場合に便利です |
| Frame | 🎥 | シーンでフレーム表示 | オブジェクトを選択し、シーンビューのカメラ をそのオブジェクトが画面に収まるように移動させます |
🛠️ ツールバーの機能
ツールバーには、参照ビューを管理するための追加コントロールがあります。
リフレッシュボタン (🔄): 現在のシーンを再スキャンして参照リストを更新します。シーンに変更を加えた後に有効です。
すべて選択ボタン (👁️): ヒエラルキー内で参照されているすべての GameObject を一度に選択します。バッチ処理を行う際に便利です。
List/Grouped 切り替え (📁 / 📄): フラットなリスト表示とスクリプトごとのグループ表示を切り替えます。
💡 具体的なユースケース
リファクタリングの前
問い: 「このイベントの名前を変更したり削除したりした場合、どのオブジェクトが壊れるだろうか?」
答え: 変更を加える前にファインダーを開いてすべての参照を確認し、それに応じて各参照を更新します。
デバッグ
問題: 「イベントが期待通りに発行されない。」
解決策: ファインダーを使用して、アクティブな GameObject 上に参照が存在することを確認します。ステータスインジケーター (🟢/🔴) をチェックして、オブジェクトが有効であることを確認してください。
クリーンアップと最適化
目標: 「未使用のイベントを削除してプロジェクトを整理したい。」
プロセス: 各イベントについてファインダーを開きます。「0 References」と表示されていれば、そのシーンからそのイベントを安全に削除できます。
チームでのドキュメント化
ニーズ: 「特定のイベントをどのシステムが使用しているかをチームメンバーに共有したい。」
結果: ファインダーはイベントの使用状況の完全なリストを提供します。これをスクリーンショットに撮ったり、ドキュメントに記載したりできます。
❓ トラブルシューティング
参照が見つからない
考えられる原因:
- そのイベントが現在のシーンで使用されていない
- 他のシーンに参照が存在する(ファインダーはアクティブなシーンのみをスキャンします)
- イベントが
AddListener()などのコード経由でのみ使用されている(リフレクションスキャンでは検出できません) - シーン内にインスタンス化されていないプレハブ内に参照が存在する
解決策: 他のシーンを確認するか、イベントアセットに対して Unity 標準の「Find References in Scene」を使用してください。
無効な参照 (Inactive References)
原因: GameObject がヒエラルキーで非アクティブになっています。
影響: イベントバインディングは存在しますが、GameObject が有効になるまでトリガーされません。
アクション: GameObject を有効にするか、これが意図した動作(例:オブジェクトプーリングなど)であることを確認してください。
参照カウントの不一致
よくある理由:
- 各プレハブインスタンスは個別の参照としてカウントされます
- 同じスクリプト内の複数のフィールドは、それぞれ個別の参照としてカウントされます
- 非アクティブな GameObject もカウントに含まれます(ステータスアイコンを確認してください)
📖 ワークフローの例
シナリオ: ダメージシステムをリファクタリングしており、OnPlayerDamaged イベントを変更する必要がある場合。
ステップ 1: Game Event Editor を開く
ステップ 2: OnPlayerDamaged イベントを探し、🔍 アイコンをクリック
ステップ 3: ファインダーの結果を確認する:
3 References Found:
├─ PlayerHealth (Script) - Active 🟢
├─ UIHealthBar (Script) - Active 🟢
└─ DeathScreen (Script) - Inactive 🔴
ステップ 4: クイックアクションを使用して各参照に移動する:
- 🔍 Ping をクリックしてヒエラルキーでの場所を特定
- 📋 Focus をクリックしてインスペクターで開く
- 必要に応じて各参照を更新
ステップ 5: すべての使用箇所を把握した上で、安全にリファクタリングを完了する
🔗 関連ツール
ファインダー vs エディタ:
| ツール | スコープ | 最適な用途 |
|---|---|---|
| Game Event Editor | プロジェクト内の全イベント | イベントライブラリの閲覧と管理 |
| Game Event Finder (本ツール) | 単一イベントの参照 | 影響分析とデバッグ |
イベントを削除またはリネームする前には、必ずファインダーで確認してください。現在のシーンで「0 References」と表示されていても、他のシーンやコードベースのリスナーで使用されている可能性があります。
ファインダーは アクティブなシーンのみ をスキャンします。複数のシーンにわたる参照を確認するには:
- 各シーンを個別に開く
- それぞれでファインダーを実行する
- 結果を手動でまとめる
プロジェクト全体でのアセット検索を行うには、イベントアセット自体に対して Unity 標準の「Find References in Scene」機能を使用してください。