テラシュールブログ

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

ラベルを利用したアセット管理ワークフローをより簡単に使いたい

シーンが参照しているアセットにラベルを付与するエディタ拡張を作ってみました。

LabelManager.cs

ラベルについては[Unity]ラベルを利用したアセットの管理についてとかUnityのアセットワークフローとかをどうぞ。

このアセットは、シーンの参照している、もしくはディレクトリ以下のアセット一覧にラベルを貼り、識別しやすくすることを目的としたアセットです。
アセット:スクリプト・モデル・テクスチャ、オーディオ等々の総称

本当はもっと単純な物でしたが、何かノってしまいこんな規模になってしまいました(これだからエディタ拡張は怖い)

これを使えば、Projectビューのアセットがどのシーンに使われているのかが一発で判るようになります。例えばNGUIに適応した場合、NGUIのスクリプトがどのサンプルに当てはまるのか判ります。

スクリーンショット 2014-01-12 19.25.53

但しUnityのラベル表示数はInspectorウィンドウの横幅に依存するので、実際にラベル一覧に表示されていなくともラベルが登録されている可能性があります。その場合は、Window>Label>Asset LabelsでAsset Labelsウィンドウを表示して下さい。これは選択中のオブジェクトのラベル一覧を表示します。

スクリーンショット 2014-01-12 23.37.20

また逆に、シーン名で検索すればシーンで使用しているアセットの一覧が取得出来ます。例えばProjectビューの検索バーに以下のように入力すると、「検索したいラベル」を持つアセットの一覧が表示されます。

「l:検索したいラベル」

この際、前後はワイルドカードで検索されるので、あまり短いラベル名の場合多くの要素がひっかかります。(例えばLevelで検索すると、Level1〜Level999のようなラベルを持つアセットが引っかかります)

スクリーンショット 2014-01-12 23.40.43

ラベルの検索はUnity基本機能のラベル検索が地味に便利です。Projectビュー右側のラベルボタンを押すと、ラベル一覧が表示されます。これは他の検索同様、検索バーに文字を打てば絞り込めるので、ラベル名が分からない時はここから検索すると早いです。

スクリーンショット 2014-01-12 23.41.05


使い方
まずはインストール方法について。

1. ここのページに行き、Download Gistをクリック。
2. UnityのAssetsフォルダの下にEditorフォルダを作成
3. 1で取得したzipファイルを解凍し、中身をEditorフォルダ以下に突っ込む

スクリーンショット 2014-01-13 0.10.54

後は使い方です。

メニュー>Edit>Label>UpdateAllSceneLabelを選択すると、Assets以下にあるシーンファイルを全て検索し、シーンが直接参照しているアセットに片っ端からラベルを貼ります。

この際、シーンが直接参照していない(例えばResoucesから取得している等)のアセットは判別出来ないのでラベルが貼られません。もし必要なら「参照しているシーン名+Res」みたいなシーンを用意しておき、そこから参照しておけばシーン名で検索した時にヒットします。

スクリーンショット 2014-01-13 0.04.05

また、(右側のウィンドウの)ディレクトリを選択し 右クリック>Label>AddDirectoryLabel を選択すると、ディレクトリ以下のアセットにディレクトリ名でラベルを貼ります。これは例えばサンプルシーンから参照されていないアセットや3Dモデルといったアセットが何のアセットなのかを判別するのに役に立つと思います。例えばNGUIのフォルダでラベルを貼っておけば、全NGUI関連のアセットにNGUIとラベルが付与されます。

スクリーンショット_2014-01-13_0_57_45-3

Editor拡張等のシーンが参照していないスクリプトは結構多いので、このように登録しておくと後々便利です。また、機能毎に関連するスクリプト・テクスチャ等を引き出すのにも役立ちます(機能毎にフォルダを分けている場合)。下の一覧は「NGUIラベルがあるシーン一覧」を取得した状態です。

スクリーンショット 2014-01-13 0.22.09

また、この検索結果をお気に入りに登録しておくことで、素早くお気に入りから検索結果にアクセス出来ます。良くアクセスするタイプのアセットは、ここに登録しておくと微妙~に便利です。

スクリーンショット_2014-01-13_0_28_03-5

なお、このラベルを更新するタイミングには注意して下さい。例えば複数人で開発している場合、複数人が同時にラベルを更新すると競合を起こして面倒になるかもしれません(完全な自動化をしていないのはその為です)。

もし特定のシーンのみラベルを更新したい場合、右クリック>Label>UpdateSceneLabelを選択して下さい。これで特定のシーンのみ更新が走ります。

スクリーンショット 2014-01-13 0.35.38

それと、この機能で色々と遊んでいるとラベルを一括で消したくなります。確実になります。例えばシーン名を変更した場合ラベル名が変更されるわけではないので、ラベル名が重複する…そんな時です。

その場合、Unityの標準機能ではラベルを一括更新出来ないので(これがラベルが使いにくい理由)、 メニュー>Window>Label>RemoveLabel を使います。このウィンドウを開いた後、RemoveLabelNameに消したいラベル名を入力しremove labelボタンを押せばラベルのついたアセットからラベルを剥がします。

スクリーンショット 2014-01-13 0.38.47

ラベルの入力はAsset Labelsウィンドウを選択可能にしてあるので、そこからコピペすると楽です。手入力する場合はラベルの名前は元になったシーン名やフォルダ名からスペースを削除している点に注意して下さい。(こうしないと検索でヒット出来なくなる為)


機能一覧

メニュー>Edit>Label>UpdateAllSceneLabel

  • 全シーンを確認し、シーンが直接参照しているアセットに

  シーン名と同じラベルを貼る

  • シーンから参照されていなかった場合、ラベルを剥がす

メニュー>Edit>Label>RemoveAllSceneLabel

  • UpdateAllSceneLabelで貼ったラベルを剥がす

メニュー>Assets>Label>UpdateSceneLabel

  • 特定のシーンを確認し、シーンが直接参照しているアセットに

  シーン名と同じラベルを貼る

  • シーンから参照されていなかった場合、ラベルを剥がす

メニュー>Assets>Label>RemoveSceneLabel

  • RemoveSceneLabelで貼ったラベルを剥がす

メニュー>Assets>Label>AddDirectoryLabel

  • 選択中のディレクトリ以下のアセットにディレクトリ名と

  同じラベルを貼る

メニュー>Assets>Label>AddDirectoryLabel

  • AddDirectryLabelで貼ったラベルを剥がす

メニュー>Window>Label>RemoveLabels

  • 指定のラベルを全て剥がす

メニュー>Window>Label>Asset Labels

  • 対象のラベル一覧を表示する


あったら良いなって機能を追加しながら記事書いたら記事書くのに3時間近くかかってしまった。これだからエディタ拡張は怖い。
そして「ですます調」のブログに挑戦。

(ゲームジャムに向けてエディタ拡張を用意しておく系)