Skip to content

Component Copier ​

衣装やアバターに付いているコンポーネント(PhysBone、Contact、Constraint、Modular Avatar など)を、別の衣装やアバターへコピーできます。単に設定値をコピーするだけでなく、 コンポーネント内のオブジェクト参照(ボーン、コライダー、Constraint のソースなど)も、コピー先の対応するオブジェクトへ自動的に差し替えます。

Component Copier の全体像。名前が違うオブジェクトにも対応付けてコンポーネントをコピー

こんなときに使えます:

  • 同じ衣装の更新版や、別アバター対応版へ PhysBone や Modular Avatar の設定を引き継ぎたいとき
  • 衣装の一部のコンポーネントだけを、別の衣装へ移植したいとき

使い方 ​

  1. メニューから Tools > Kanameliser Editor Plus > Component Copier を開く
  2. コピー元 に、設定を持っているオブジェクトを指定する。(Hierarchy 上のオブジェクト、Prefab インスタンス、Project 内の Prefab アセットのいずれも指定可能。指定すると配下のコンポーネントが一覧表示されます)
    • 同じ階層の反対側へコピーする場合は、反対側へコピー をオンにする。(手順 4 では、オブジェクト指定の代わりに方向を選択します。詳細は 反対側へコピー を参照)
  3. コピーしたいコンポーネントにチェックを入れる
  4. コピー先 に、設定を受け取るシーン上のオブジェクトを指定する。(コピー元とコピー先のオブジェクトの対応付けが自動で行われます。⇅ ボタンでコピー元とコピー先を入れ替えられます)
  5. 対応付け セクションを確認し、要確認(?)や未対応(✖)の項目があれば、必要に応じて手動で対応先を設定する
  6. 適用前チェック の内容を確認し、問題がなければ 適用 ボタンを押す。(※ Undo で元に戻せます)
  7. 適用後に表示される差分チェックの結果を確認し、期待通りにコピーされたか確かめる

注意:コピー先に指定できるオブジェクトについて

コピー先には シーン上のオブジェクト (Prefab インスタンスや Prefab Stage 内のオブジェクトを含む)のみ指定可能です。Prefab アセットへ直接適用すると Prefab Variant に波及してしまうなど、Undo が難しくなってしまうためです。
なお、何も変更を行わない「差分チェックのみ」であれば、Prefab アセットも指定できます。
「反対側へコピー」ではコピー元自体に書き込むため、Prefab アセットをコピー元にした場合は差分チェックのみ実行可能です。

コンポーネント一覧 ​

コピー元を指定すると、配下のコンポーネントが種類やオブジェクトごとにまとめて表示されます。

  • プリセット: PhysBone、Contact、Constraint、MA(Modular Avatar)、その他のツール(AAO: Avatar Optimizer、TexTransTool などコピー元に存在するもの)、すべて、でまとめて選択・解除できます
  • 検索: オブジェクトのパスや型名で部分一致検索が行えます。.* ボタンをオンにすると正規表現(例: Skirt|Hair)が使用できます
  • その他も表示: 既定では非表示になっている基本型(Transform、Renderer、MeshFilter、Animator、VRCAvatarDescriptor、PipelineManager)も選択対象に含めます
  • コピー先にないオブジェクト: 一覧の末尾には、コピー先に存在しない Prefab や空オブジェクト(アンカーなど)がまとめられます。コピー対象のコンポーネントに必要なものは自動生成され、それ以外もチェックを入れることで追加可能です

※ リストの行や見出しをクリックすると、該当するオブジェクトが選択され Hierarchy 上でハイライト表示されます。

MA Mesh Settings はコピー後に作り直すのがオススメ

MA Mesh Settings は参照ごとコピーできますが、Anchor Override と Root Bone はアバターごとに異なります。コピー後はいったん削除し、コピー先のアバターで Setup Outfit をやり直してセットアップし直すことをオススメします。

対応付け ​

コピー元とコピー先のオブジェクトは、パス、名前、Humanoid ボーンの辞書(Hips と Hip、UpperArm_L と Left arm など)を参照して自動で紐付けられます。Armature.1 や .001 といった重複回避の接尾辞や、片側だけに付いた共通の接頭辞・接尾辞も自動で認識・補正されます。

対応付けの例。Humanoid ボーン辞書や接尾辞・接頭辞の補正で自動対応し、似た名前は候補として表示

  • 曖昧な対応付け: 類似した名前による対応は自動採用せず、候補として表示します
  • ボーンとその他の区別: ボーン(SkinnedMeshRenderer が参照する Transform)とそれ以外のオブジェクトは個別に識別して対応付けます
  • 不足ボーンの扱い: コピー先にないボーンは自動作成されません。該当ボーンに紐付くコンポーネントは 保留 状態になるため、対応付けセクションで手動指定してください
  • 手動調整: 各行では、ドロップダウンから候補を選ぶか、ObjectField に直接オブジェクトを指定できます。「なし」を選択すると対応先なしとして処理されます
  • 設定の保持: 手動で指定した対応は、更新(↻)やシーンの変更を行っても保持されます

コピー元の外への参照について ​

衣装のコンポーネントがアバター側のボーンやコライダーを参照している場合、コピー先が別のアバター配下にあれば、 コピー先アバターの対応するオブジェクトへ自動的に参照を差し替えます。 対応するオブジェクトが見つからない場合は元の参照を維持します。

アバター側のコライダーへの参照が、コピー先アバターのコライダーへ差し替わる様子

※「コピー元の外への参照」グループのトグルで全体の一括切り替えができるほか、行ごとに「そのまま残す」を選択することも可能です。

アバター内に衣装を置いて作業しよう

たとえば衣装のコンポーネントをコピーしたい場合、コピー元とコピー先の衣装はそれぞれアバター内に配置してコピーするのがオススメです。
MA Mesh Settings や MA Mesh Cutter、MA Shape Changer のような、アバターのオブジェクトを指定しがちなコンポーネントの参照も一緒に差し替えられます。

反対側へコピー(ミラー) ​

コピー元の片側(左半身など)にあるコンポーネントを、同じ階層の反対側へコピーできます。コピー元とコピー先の間にある 反対側へコピー をオンにすると、コピー先の欄が方向(L → R / R → L)の選択に変わり、選んだ側のコンポーネントのみが一覧に表示されます。コピー元自体が片側にある場合(Hand_L など)は、その側が自動で選択されます。オン / オフの切り替えや方向を変更しても、一覧でチェックした選択状態は維持されます。コピー先を指定したときや、中央のオブジェクトのコンポーネントから Copy with Component Copier で開いた場合は、反対側へコピー は自動的にオフになります。

以下色々書いていますが、位置や回転の反転、名前の置換処理など含めていい感じに左右反転してコピーします、ということです。ボーンの軸依存など一部自動反転が難しい値については、適用前チェックで一覧表示されるので、コピー後に確認してください。

反対側へコピーしたときの値の変化。位置・回転が左右反転し、Parameter の左右表記も置き換わる

  • 左右の判定: オブジェクト自身または親の名前のうち、もっとも外側にある左右表記で判定します(例: Hand_L/Ribbon_R は左側)。左右表記がない名前でも、Armature 内の Humanoid ボーン名であればボーン辞書により左右を判定します。Hips や Head のような中央のオブジェクトに付いたコンポーネントは反対側が存在しないため、一覧には表示されません(中央のオブジェクトにまとめて付けた PhysBone などは、本機能ではコピーできません)

  • 対応付け: オブジェクトは名前の左右表記と Humanoid ボーンの左右で対応付けます。Hips や Spine などの中央のオブジェクトは自分自身に対応し、参照はそのまま保持されます。左右表記のないオブジェクトは、親の対応先の下にある同名オブジェクトに対応します(例: Hand_L/Collider → Hand_R/Collider)

  • 位置と回転の左右反転: 以下の値は、アバターの中心(アバタールートの YZ 平面)を基準に左右反転し、コピー先のローカル値に変換します。左右でボーンの向きが異なるリグであっても、ワールド上では左右対称の位置に配置されます

    • PhysBone Collider、Contact、MA Global Collider の位置と回転
    • PhysBone の Endpoint Position
    • Constraint の At Rest の値、Parent Constraint のソースごとのオフセット、Aim Constraint の軸と World Up Vector、LookAt Constraint の Roll(符号を反転)
    • MA Mesh Settings の Bounds(Bounds の設定が Set または Set or Inherit で、Root Bone を指定している場合)
    • DynamicBone の End Offset、Gravity、Force、および DynamicBone Collider の Center
    • Unity の Sphere / Capsule / Box Collider の Center

    ※ 上記に含まれないコンポーネント(Unity の Joint など)の位置や向きは、左右反転せずにそのままコピーされます

  • 左右の区別がある名前: 以下の設定値に含まれる名前やパスを、反対側のものへ自動で置き換えます

    • Contact のタグ(HandL / FingerIndexR などの標準タグや、Tail_L などの左右表記を含むタグ)
    • PhysBone と Contact Receiver の Parameter(例: Ear_L → Ear_R)
    • MA Global Collider の上書き対象コライダー(Collider to Remap、例: HandLeft → HandRight)
    • MA Bone Proxy の追従先(Humanoid ボーンおよびその配下のパス)
  • 足りないオブジェクトの自動生成: 反対側にオブジェクトが存在しない場合、反転した名前(例: Item_L → Item_R)で左右対称の位置にオブジェクトを作成します(足りないオブジェクトを作成 がオンの場合のみ。ボーンは作成されません)

  • 確認が必要な値: 以下のボーン軸に依存する設定値は、リグ構造によって正解となる反転結果が異なるため、値を保持したままコピーし「適用前チェック」に一覧表示します。コピー完了後、反対側の設定値を確認してください

    • PhysBone の Limit Rotation(Limit Type が None 以外のとき)
    • Position / Rotation / Aim / LookAt Constraint のオフセット(0 以外のとき)
    • Constraint で固定している軸(Freeze の各軸)
    • DynamicBone の Freeze Axis(None 以外のとき)、DynamicBone Collider および Capsule Collider の Direction、Box Collider の Size

使える左右表記は以下のとおりです。.001 や (1) のような末尾の番号は保持され、左右表記のみが反転します。

パターン例
末尾の区切り文字(. _ - 空白)と L / RHand_L、Hand.R、hand-l
先頭の L / R と区切り文字L_Hand、r.hand
先頭または末尾の Left / RightLeftArm、leftArm、ArmLeft、left_arm、LEFT_ARM
先頭または末尾の 左 / 右左手、リボン右
区切り文字で挟まれた左右表記Skirt_L_01、Skirt_Left_01、髪_左_01

※ 区切りのない RibbonL や Leftribbon、区切り文字で挟まれた左右表記が 2 つ以上ある名前は対象外です。ただし Armature 内の HandL、Leftarm、UpperLeftArm のような Humanoid ボーン名は、ボーン辞書を用いて左右を判定します。

左右反転の基準はアバター

対応付けと左右反転は、コピー元が配置されているアバターを基準に行われます。衣装のコライダーがアバターの Hand_L を参照している場合、コピー後は Hand_R を参照します。

コピー元がアバター内にない場合は、コピー元自身またはその親のうち、もっとも外側にある Animator が付いたオブジェクトが基準となります(該当がない場合は最上位の親)。
なお、「反対側へコピー」はアバター内で完結するため、アバター外のオブジェクトへの参照はそのまま保持されます。

メッシュ自体は反転しません

反対側に作成されるオブジェクト(Prefab を含む)の位置や回転は左右対称になりますが、メッシュ(形状)そのものは反転しません。左右非対称なメッシュの場合、反転した形状ではなく、回転した状態のまま配置されます。

オブジェクトを 1 つだけ反対側へコピー ​

衣装を着せた状態でコライダー用オブジェクトを調整した際など、単一のオブジェクトのみを反対側へ反映したい場合は、Inspector のコンポーネントヘッダー(Transform を含む)または Hierarchy の右クリックメニューから Copy to Other Side を選択します。専用の小ウィンドウが開き、対象オブジェクトの位置・回転およびアタッチされているコンポーネントを、反対側の対応オブジェクトへコピーできます。

Inspector のコンポーネントヘッダーを右クリックして Copy to Other Side を選ぶ

  • 反対側ターゲットの指定:
    • 対応するオブジェクトを自動検索し、欄の下に検索結果の場所を表示します。検索結果と異なる場合は、手動でアバター内の反対側オブジェクトを指定してください。
    • 候補が未確定の場合、正しければ 確定 を押し、候補が別のオブジェクト(アバター側の同名オブジェクトなど)の場合は 新しく作成 を選択します(※ボーンは自動作成されないため、ボーンに対しては 新しく作成 は表示されません)。
    • 親の対応先が決まらず作成できない場合は、親候補を確定するボタンや親を新しく作成するボタン(親がボーンでない場合)が表示されます。
    • 自動に戻す ボタンを押すことで、いつでも自動検索の結果に戻すことが可能です。
  • 反対側に自動作成: 反対側に対応するオブジェクトが存在しない場合、反対側の親(例: Hand_L に対する Hand_R)配下に、反転した名前で左右対称の位置にオブジェクトを自動生成します。
  • コピーする内容の選択:
    • Transform(位置・回転)およびコンポーネントを選択してコピーできます。Transform は位置と回転を左右反転し、スケールはコピー元と同じ大きさになるよう調整されます。
    • 起動方法による初期チェック状態の違い:
      • コンポーネントヘッダーから起動:該当コンポーネントのみチェック。
      • Transform ヘッダーから起動:Transform のみチェック。
      • Hierarchy から起動:既定で対象外のコンポーネント(Renderer など)を除き、すべてチェック。
    • ボーンの Transform 扱い: ボーン(スキンメッシュ用ボーンや Humanoid ボーン)はメッシュ形状に影響し左右のリグが完全対称とは限らないため、Transform ヘッダーから開いた場合を除き、標準では Transform のチェックが外れた状態になります。
    • オブジェクトのアクティブ状態、タグ、レイヤーは、反対側にオブジェクトを新規作成する場合のみコピー元に合わせて設定されます。
  • コンポーネントと参照の処理:
    • 反対側に既存のコンポーネントがある場合は上書きされます。
    • 反対側に対応先がない参照は None に設定され、ウィンドウ上に表示されます。参照先(またはその親)の対応先が候補状態(未確定)の場合は、その場で候補を確定できるボタンが表示されます。
  • 子オブジェクトの扱い:
    • 子オブジェクトは原則コピーされません。ただし、コピー対象のコンポーネントが参照している空オブジェクトが反対側に存在しない場合は一緒に自動作成され、ウィンドウに表示されます(Prefab として追加される場合は Prefab ごとインスタンス化されます)。
  • 適用:
    • 適用 ボタンを押すと処理を実行してウィンドウを閉じます(※ Undo 可能)。追加できなかったコンポーネントが存在する場合はウィンドウを閉じず、エラー件数を表示します。

※ 本体ウィンドウの「反対側へコピー」とは異なり、本機能では反対側にすでに存在するオブジェクトであっても、左右対称の位置と回転へ移動させます。

設定 ​

設定選択肢既定
既存のコンポーネント上書き / 追加(重複させる) / スキップ / 置き換え(削除してからコピー)上書き
足りないオブジェクトを作成オン / オフオン
未解決の参照None でコピー / コンポーネントごとスキップNone でコピー
  • 上書き: コンポーネント自体を作り直さずに値を更新するため、他から該当コンポーネントへ張られている参照が切れません
  • 置き換え: 同じ種類の既存コンポーネントを削除してからコピーします。ただし、他のコンポーネントから依存されていて削除できないもの(例: HingeJoint が要求する Rigidbody など)は削除せずにその場で上書きし、「適用前チェック」にその旨を表示します
  • 未解決の参照: 参照先にコピー対応するオブジェクトがない場合の挙動です。「コンポーネントごとスキップ」を選ぶと、ソースのない Constraint やコライダーのない PhysBone といった不完全なコンポーネントの作成を防ぎ、対応付けが完了するまで処理を保留できます

ネストされた Prefab ​

コピー元の中にある Prefab(PhysBone 設定用 Prefab、Head 直下の帽子など)がコピー先に存在しない場合、オブジェクトを一から作り直すのではなく、同じ Prefab をコピー先にインスタンス化します。

コピー先にない Prefab は、同じ Prefab として追加される

この際、Prefab 内のコンポーネントは選択の有無にかかわらずすべてコピーされ、コピー元のインスタンスで変更された値も引き継がれます。コピー元のインスタンスで改名・削除されたオブジェクトやコンポーネントも同様に反映されます。不要なコンポーネントのチェックを外しておくと、インスタンス化された後に自動で削除されます。「コンポーネントごとスキップ」で保留されたコンポーネントも同様に削除対象となります。

なお、Prefab 内のオブジェクトの対応先を手動で指定した場合は、その Prefab は(一部であっても)コピー先に存在するとみなし、Prefab 全体の自動追加は行われません。指定されたオブジェクトは指定先へコピーされ、対応先のないオブジェクトは 1 つずつ生成されます。Prefab 内のその他のオブジェクトにも既存オブジェクトを割り当てる場合は、「対応付け」セクションでそれぞれの対応先を指定してください。

適用前チェックと差分チェック ​

適用前チェック ​

実行前に以下の処理内容や注意点が事前にリストアップされます。

  • 新規・上書き・置き換え・スキップの各件数、および新規作成されるオブジェクト数
  • 保留になっているコンポーネントとその理由
  • 参照が空(None)になる(または設定によりスキップされる)未解決の参照とその原因
  • そのまま保持される「外への参照」
  • コンポーネントの置き換え(削除)によって、コピー対象外のコンポーネントからの参照が切れる場合の警告
  • 「反対側へコピー」にて、反対側に合わせる値の件数と、そのままコピーする(確認が必要な)軸依存の値

差分チェック ​

「差分チェックのみ」を実行すると、シーンを変更せずにコピー実行後の期待値と現在の状態を比較できます。また、適用実行後にも同形式で結果が表示され、以下のステータスごとに状態を確認できます。

  • 状態区分: 一致 / 値が違う / 参照が違う / アバターの外を参照 / 参照が未解決 / コピー先にない / コピー先にだけある

「アバターの外を参照」は、コピー先のアバター(アバターの中にない場合は、いちばん上の親)の外にあるオブジェクトを指している参照です。対応先がなくそのまま残った、コピー元のアバターへの参照などが該当します。対応付けセクションで置き換え先を指定してから、もう一度適用してください。

注意事項 ​

  • トランスフォームのコピー: 位置(Position)や回転(Rotation)はローカル値をそのままコピーします(「反対側へコピー」では左右反転します)。ボーンの初期向きが大きく異なるアバター同士では、コピー後に手動調整が必要になる場合があります
  • Modular Avatar の参照補正: Merge Armature の対象や Object Toggle / Shape Changer などの参照は、オブジェクト参照だけでなくアバター基準のパス情報も自動で書き換えます
  • PipelineManager について: PipelineManager をコピー対象に含めると Blueprint ID まで複製されてしまいます。通常はチェックを外して対象外にしてください

アクセス方法 ​

以下のいずれかの方法でツールを起動できます。

  • メインメニュー: Tools > Kanameliser Editor Plus > Component Copier
  • Hierarchy 右クリック → Kanameliser Editor Plus > Component Copier > Use as Source / Use as Target
  • Project ビュー(Prefab を右クリック) → Kanameliser Editor Plus > Component Copier > Use as Source
  • Inspector(コンポーネントヘッダーを右クリック) → Kanameliser Editor Plus > Copy with Component Copier(※選択したコンポーネントのみにチェックが入った状態で開きます)

単一オブジェクトを反対側へコピーするウィンドウ(オブジェクトを 1 つだけ反対側へコピー)は、以下の方法で開きます:

  • Inspector(Transform を含むコンポーネントヘッダーを右クリック) → Kanameliser Editor Plus > Copy to Other Side
  • Hierarchy 右クリック → Kanameliser Editor Plus > Component Copier > Copy to Other Side