テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityのシーン内で特定のコードを持つコンポーネントを見つける機能を作った

最近ブログの更新に使っていた2〜4時間を全部、Unityのシーン内の構造を解析するアセットの作成に使用してるtsubakiさんです。

シーン内部の構造を解析するアセットですが、機能自体はだいたい完成しましたが、コードの整理にもう少し時間がかかりそうなので、先に単機能で完結してるコレを紹介しておきます。

ソースコードを検索するアレ。

f:id:tsubaki_t1:20141124225019p:plain

このアセット*1は今作ってるReferenceExplorerのオマケ機能で、シーン内で使用されているコンポーネントのコードを検索し列挙するアセットです。

入力欄の所に検索したいキーワードを入力すると、シーン内にあるキーワードを持つコンポーネント一覧を表示します。その際、該当のコンポーネントがアタッチしているオブジェクトもついでに列挙します。

 

例えばInputと入力すればシーン内でInputクラスを使用しているコンポーネントが列挙できますし、OnTriggerと入力すればOnTriggerでアクションを開始するオブジェクトを一覧で取得できます。

見つけたコードをダブルクリックすればコードを開けます。行数ジャンプはしないので、開いたらまた検索して下さい。オブジェクトをダブルクリックすればオブジェクトにフォーカスします。

f:id:tsubaki_t1:20141124225544p:plain

 検索範囲を特定のオブジェクト群に制限したい場合は、SelectionをONにすると、Hierarchyで選択中のオブジェクト群の範囲からコードを検索します。

 f:id:tsubaki_t1:20141124230829p:plain

 またRegexをONにすれば、検索キーワードに正規表現を使用することが出来ます。ワイルドカード検索の方が楽かもしれませんが、それは要望が来たら考えます。

 

強引で意味があるかは分かりませんが、「Testクラスのstatic変数Scoreに代入しているコード」を見つけたい場合、「Test.score\s=\s」のように検索すれば、何か数値を代入している所を見つけることが出来ると思います。

ちなみに\sは空白の代わりの文字です。\(バックスラッシュ)を入力するには、option押しながら¥キーでOKです。

f:id:tsubaki_t1:20141124232004p:plain

ただ各コンポーネントのコードを舐めるだけという動作の為、コンポーネントではないコード(Monobehaviourを継承していないコード)は検索でヒットしません。ですが、そのように設計してるならコードから追いやすいとも思うので、まぁ頑張ってください。

 

ちなみにソースコード静的解析ライブラリを探し中です。*2もし何か情報があれば、是非欲しいです。その辺りあんまり詳しくないので

 

使い方

以下のコードをAssets/Editorフォルダ以下に配置して下さい。

Window/ReferenceExplorer/SearchCodeでコード検索画面が開きます。


シーン内のコード群から特定のコードを見つける

*1:名前はまだない

*2:それが出来れば、より高度な検索もできるようになるのです。やりたい事は静的な変数の中身を推測するとか、内包クラスが何クラスなのかを知るとかその辺り