これは正規表現でマッチする、構造が同じ場所にあるコンポーネントを一括でコピーするUnityエディタ拡張です。
このリポジトリのzipファイルをダウンロードして、解凍したものをアセット内にコピーします。
ここで注意するのは Editor
フォルダも そのまま コピーすることです。
これはUnityの仕様で「Editor
フォルダの中にあるスクリプトはエディターでのみ有効で、ゲーム実行時には無視される」というのがあるからです。
(参考: 特殊なフォルダー名 - Unity マニュアル)
Editor
フォルダ内の *.cs
ファイルのみをアセットにいれてしまうと、ゲーム実行時にも実行されてしまいエラーが発生します。
- ヒエラルキーでコピー元のオブジェクトを選択
- ヒエラルキーで右クリックしてコンテキストメニューから
Copy Components By Regex
をクリック Copy Components By Regex
ウィンドウが開くので正規表現
にコピーしたいコンポーネントとマッチする正規表現を書く (例:Dynamic Bone
とDynamic Bone Collider
をコピーしたいならDynamic
など)Copy Components By Regex
ウィンドウのCopy
ボタンを押す- ヒエラルキーでコピー先のオブジェクトを選択
Copy Components By Regex
ウィンドウのPaste
ボタンを押す
コピーするオブジェクトとコンポーネント内で完結しているオブジェクト参照(Dynamic Bone の root
など)は自動的にコピー先のオブジェクトやコンポーネントに差し替えます。
逆に言えばコピーする範囲外のコンポーネントへの参照はそのままになっているため、注意してください。
構造の同一性はオブジェクトの名前で判断しているため、同じ親を持つ同名の子オブジェクトがある場合などで動作がおかしくなる可能性があります。 また、完全に構造が同一でなくても子の名前が同じならできるだけ辿ろうとするため、ボーンの増加などの場合もそのままコピーできます。
Cloth コンポーネントのコピーは同じモデル同士で Cloth 部分の頂点数が同じならば、Constraints の単純なコピーが行われます。(高速)
頂点数が変わっていたり、大きく形状が変わっていた場合などは ClothコンポーネントのConstraintsを一番近い頂点からコピーする
にチェックを入れて使用するとコピーできます。(少し遅い)
「一番近い頂点からコピーする」設定はコピー元とコピー先のそれぞれの頂点の座標を比較して行うのですが、Unity(5.6.3p1, 2017.4.15f1) の Cloth の追加時の頂点座標がおかしいため、あらかじめ Cloth をコピー先に追加しておいてください。
https://taremin.kibe.la/shared/entries/95c1d6cf-9fcd-4a57-8849-677529e50e77 により詳しい説明を書きましたので、もしよければそちらも参考にしてください。
CopyComponentsByRegex
では以下のコードを改変して利用しています。
- KDTree.cs - A Stark, September 2009. https://forum.unity.com/threads/point-nearest-neighbour-search-class.29923/
- CopyPasteComponent.cs - tsubaki, November 2015. https://gist.github.com/tsubaki/d049957ad312e3a12764