これは正規表現でマッチする、構造が同じ場所にあるコンポーネントを一括でコピーするUnityエディタ拡張です。
VRChat Creator Companion (VCC) を使用する場合、以下の手順でインストールできます:
CopyComponentsByRegex を追加Window -> Package Manager を開く+ から Add package from git URL をクリックhttps://github.com/Taremin/CopyComponentsByRegex.git をコピー&ペーストして Add をクリックこのリポジトリの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 など)は自動的にコピー先のオブジェクトやコンポーネントに差し替えます。
逆に言えばコピーする範囲外のコンポーネントへの参照はそのままになっているため、注意してください。
構造の同一性はオブジェクトの名前で判断しているため、同じ親を持つ同名の子オブジェクトがある場合などで動作がおかしくなる可能性があります。 また、完全に構造が同一でなくても子の名前が同じならできるだけ辿ろうとするため、ボーンの増加などの場合もそのままコピーできます。
コピー元とコピー先でオブジェクト名が異なる場合(例:VRoid Studioの J_Bip_C_Head と標準的な Head)、置換リストを使用して名前の違いを吸収できます。
置換リストには2種類のルールがあります:
正規表現ルール: 任意の正規表現パターンで名前を変換
J_Bip_C_(.+) → $1 (VRMプレフィックスを削除)HumanoidBoneルール: Unity Humanoidリグのマッピング情報を動的に取得してマッチング
詳細は 置換リストガイド を参照してください。
Cloth コンポーネントのコピーは同じモデル同士で Cloth 部分の頂点数が同じならば、Constraints の単純なコピーが行われます。(高速)
頂点数が変わっていたり、大きく形状が変わっていた場合などは ClothコンポーネントのConstraintsを一番近い頂点からコピーする にチェックを入れて使用するとコピーできます。(少し遅い)
「一番近い頂点からコピーする」設定はコピー元とコピー先のそれぞれの頂点の座標を比較して行うのですが、Unity(5.6.3p1, 2017.4.15f1) の Cloth の追加時の頂点座標がおかしいため、あらかじめ Cloth をコピー先に追加しておいてください。
https://taremin.github.io/2018/06/12/4-CopyComponentsByRegex_%E3%81%AE%E7%B0%A1%E5%8D%98%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%A8%E8%AA%AC%E6%98%8E/ により詳しい説明を書きましたので、もしよければそちらも参考にしてください。
Window -> General -> Test Runner を開くEditMode タブを選択CopyComponentsByRegex.Tests アセンブリのテストが表示されるRun All ボタンでテストを実行Unity Test Framework をコマンドラインから実行することも可能です:
Unity.exe -runTests -batchmode -projectPath <プロジェクトパス> -testPlatform EditMode -testResults results.xml
CopyComponentsByRegex では以下のコードを改変して利用しています。
taremin.copy-components-by-regex
未設定
0.1.0
2019.2 以降
なし
なし
なし
未設定