Unityのシーン内で特定のコードを持つコンポーネントを見つける機能を作った
最近ブログの更新に使っていた2〜4時間を全部、Unityのシーン内の構造を解析するアセットの作成に使用してるtsubakiさんです。
シーン内部の構造を解析するアセットですが、機能自体はだいたい完成しましたが、コードの整理にもう少し時間がかかりそうなので、先に単機能で完結してるコレを紹介しておきます。
ソースコードを検索するアレ。
このアセット*1は今作ってるReferenceExplorerのオマケ機能で、シーン内で使用されているコンポーネントのコードを検索し列挙するアセットです。
入力欄の所に検索したいキーワードを入力すると、シーン内にあるキーワードを持つコンポーネント一覧を表示します。その際、該当のコンポーネントがアタッチしているオブジェクトもついでに列挙します。
例えばInputと入力すればシーン内でInputクラスを使用しているコンポーネントが列挙できますし、OnTriggerと入力すればOnTriggerでアクションを開始するオブジェクトを一覧で取得できます。
見つけたコードをダブルクリックすればコードを開けます。行数ジャンプはしないので、開いたらまた検索して下さい。オブジェクトをダブルクリックすればオブジェクトにフォーカスします。
検索範囲を特定のオブジェクト群に制限したい場合は、SelectionをONにすると、Hierarchyで選択中のオブジェクト群の範囲からコードを検索します。
またRegexをONにすれば、検索キーワードに正規表現を使用することが出来ます。ワイルドカード検索の方が楽かもしれませんが、それは要望が来たら考えます。
強引で意味があるかは分かりませんが、「Testクラスのstatic変数Scoreに代入しているコード」を見つけたい場合、「Test.score\s=\s」のように検索すれば、何か数値を代入している所を見つけることが出来ると思います。
ちなみに\sは空白の代わりの文字です。\(バックスラッシュ)を入力するには、option押しながら¥キーでOKです。
ただ各コンポーネントのコードを舐めるだけという動作の為、コンポーネントではないコード(Monobehaviourを継承していないコード)は検索でヒットしません。ですが、そのように設計してるならコードから追いやすいとも思うので、まぁ頑張ってください。
ちなみにソースコード静的解析ライブラリを探し中です。*2もし何か情報があれば、是非欲しいです。その辺りあんまり詳しくないので
使い方
以下のコードをAssets/Editorフォルダ以下に配置して下さい。
Window/ReferenceExplorer/SearchCodeでコード検索画面が開きます。