CopyComponentsByRegex の簡単な使い方と説明

概要

正規表現でマッチするコンポーネントをまとめてコピーできる Unity エディタ拡張です。
Dynamic Bone や VRM の Spring Bone などの設定を何度も行わなくてよくなります。
VRChat や Virtual Cast でアバターを何度もアップデートする方に特に便利だと思います。

紹介動画

こちらのツイートに動画を載せていますので、見ていただくとどんなエディタ拡張かわかりやすいと思います。

導入方法

以上でプロジェクトへの導入は完了です。

使い方

ウィンドウの表示

コピー元アバターを右クリックして CopyComponentsByRegex のウィンドウを出します。

コピーの行い方

  1. コピーするコンポーネント名にマッチする正規表現を書きます
  2. Copy ボタンを押します
  3. コピー先のアバターを選択します
  4. Paste ボタンを押します

これでコピー先のアバターへのコンポーネントのコピーは完了です。

追記(2018/08/12)

“コピー先に同じコンポーネントがあったら削除” というチェックボックスを追加しました。
これは既にDynamicBoneなどが設定してあるアバターに他のアバターから設定を上書きしたいときなどに使うのを想定しています。

Dynamic Bone コンポーネントをコピーする先のオブジェクトに既に Dynamic Bone コンポーネントがあった場合、既存の Dynamic Bone コンポーネントをすべて削除してからコピーするようになります。

追記(2018/11/23)

Cloth コンポーネントのコピーに一部対応しました。
Cloth 対象のメッシュの頂点構造(数や位置、頂点インデックス)が同じ場合、コピーが正しく行われます。

正規表現ってなに?

正規表現(Regular Expression)とは文字列検索などでよく使われる記法で、完全一致を検索するよりも柔軟な機能を持っています。
すべての機能を説明すると長くなりすぎてしまうので、ここでは簡単に「柔軟な検索機能」と思ってもらえればよいかと思います。

具体的にどのような表記ができるのかは 正規表現言語 - クイック リファレンス | Microsoft Docs を参考にしてみてください。

正規表現がわからないという場合は、とりあえずComponent名の一部を指定すると良いかもしれません。
(Dynamic Bone の場合は Dynamic などと指定すると Dynamic BoneDynamic Bone Collider がマッチします。)

オブジェクト参照(ObjectReference) の自動差し替え

CopyComponentsByRegex では、コピー元の木構造内で完結している参照については、コピー先でもコピー先内で完結するように差し替えます。

単に機能の説明をするだけだと分かりにくいので Dynamic Bone を具体例として挙げると、Dynamic Bone コンポーネントは Root というプロパティで対象となるオブジェクトを参照しています。
このコンポーネントを単にコピーした場合、コピー先の Root プロパティはコピー元のオブジェクトを参照したままなので、そのままプロジェクト実行しても期待する動作にはなりません。

ですので、複数コンポーネントをコピーする Unity エディタ拡張などを使う場合などでも、この参照部分を一つずつ手動で差し替えないといけなかったのです。

CopyComponentsByRegexでは木構造同士のコピーを行うのでこの木構造内にあるオブジェクトだったら、たぶん差し替えた方が便利だろうというポリシーで自動的に差し替えます。(需要があるならこの差し替えは On / Off 出来てもいいかなと思ってます)

使い方の例

VRChat 用のアバター設定と Dynamic Bone と自動瞬きアニメーターをまとめてコピー

まず、上記をすべて設定したコピー元アバター全体を Disable にします。(VRC_Avatar Descripterによる誤アップロード防止)
コピー元アバターに対して VRC|Dynamic|Animator という正規表現でコピーを行います。
コピー先アバターに対してペーストします。

他にも便利な使い方などあれば、教えて頂ければこの記事に追記させていただこうと思っています。
@Taremin_VR までお知らせいただけると助かります。