メインコンテンツまでスキップ

ゲームイベントファインダー

リファレンスファインダー (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」と表示されていても、他のシーンやコードベースのリスナーで使用されている可能性があります。

スコープの制限

ファインダーは アクティブなシーンのみ をスキャンします。複数のシーンにわたる参照を確認するには:

  1. 各シーンを個別に開く
  2. それぞれでファインダーを実行する
  3. 結果を手動でまとめる

プロジェクト全体でのアセット検索を行うには、イベントアセット自体に対して Unity 標準の「Find References in Scene」機能を使用してください。