1. k7a

    Posted

    k7a
Changes in title
+[Unity]対象のアセットと依存関係のあるアセットたちを、依存関係含めてまるごとコピーする
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,59 @@
+所用で表題のようなエディタ拡張が欲しくなったのですが、どうも無さそうな気がしたので作ってみました。
+(もしかして、Unity標準の機能でできたりするんだろうか…)
+
+コードはこちら → [Gist - アセットを依存関係まるごとコピーするやつ.cs](https://gist.github.com/edit-mode/de776fb84ee060385a78505e1c43ed94)
+
+## 何をするためのものなのか
+
+例えば、こんな依存関係のアセットがあるとします
+
+```
+# 線は依存関係を示す
+
+AssetA─┬─AssetB
+ ├─AssetC
+ └─AssetD
+```
+
+普通にAssetAを複製すると、こうなる…
+
+```
+AssetA─┬─AssetB─┬─AssetA'
+ ├─AssetC─┤
+ └─AssetD─┘
+```
+
+これを以下のように依存関係まるごと複製したいときに使えます
+
+```
+AssetA─┬─AssetB
+ ├─AssetC
+ └─AssetD
+
+AssetA'─┬─AssetB'
+ ├─AssetC'
+ └─AssetD'
+```
+
+## 使い方
+コピーしたいアセットをProjectウインドウ上で選択して、コンテキストメニューの**DeepCopy**を選ぶことで実行できます。
+コピー後のファイル名は、ファイル名の接尾辞に**2**をつけたファイル名になります。(GUI上で変更可能にしたかったのですが、面倒なのでやめました)
+ただ、あんまりテストしていないので、以下に書いてある仕組みを理解できない方は容易に使わないようにしてください。。。
+特に、下の懸念点の部分も読んでおいてください。
+
+## 仕組み
+ソースを見るとわかりますが、System.IO名前空間を使って直接metaファイルやprefabの値を書き換えたりというなかなかアレな事をやっています。
+大まかな流れとしては以下のような感じです。
+
+1. 選択したアセットが依存関係を持つ全てのアセットを取得
+2. 上記で取得したアセットとそのmetaファイルを複製
+3. 複製後のmetaファイルのGUIDを書き換え
+4. 複製後のprefabやanimationが持っている参照先のGUIDを、3で書き換えた複製後のGUIDに書き換え
+
+UnityのmetaファイルとGUIDについての知識があれば理解できるかと思います。
+参考: [Unityの.metaファイルに書かれているguidについて - Qiita](http://qiita.com/wordijp/items/3e4b87756fd11c893a9d)
+
+## 懸念点など
+あまり使いまわしたりする予定も無いので、結構適当に書いてる部分があります。
+特に[92行目](https://gist.github.com/edit-mode/de776fb84ee060385a78505e1c43ed94#file-cs-L92)なんですが、上記4.の処理を行うかどうかの判定を拡張子で行っていて、多分この拡張子のパターンだけだと網羅できていない所があると思います。
+ここはあまりいい方法が思いつかなかったのですが、なにかいい方法があれば教えてください…