アバターの削除してしまった服や服飾を、もう一度アバターに追加する

概要

ミーシェちゃんの下着をHierarchy消しちゃったけど、やっぱり使いたい!

1

問題

「元prefabあるんだし、そっちからコピーしてくればいいんじゃ?」 と思い、下記手順を実行しましたが

  1. ミーシェちゃんのprefabから、HierarchyにMishe (GameObject) を追加
  2. Mishe/Mishe_underwearをMishenka word-mishenka の配下にコピー

2

HierarchyからMisheを削除すると、ずれおちちゃいます。 Mishenka/Mishe_underwear(元Mishe/Mishe_underwear)に紐づいたボーンが削除されちゃうので、それはそう。

3

なので「一度削除した服や服飾(ボーンが紐づくGameObject)を復活」させるのは簡単には無理だと思ってましたが…… できました!

解決

ひとつ自明な解決方法として「MisheArmatureMishenkaに対応付けてコピーするwhat-is-correspond」というのがまず思いつくと思いますが、それだと余分にボーンのGameObjectが増えすぎるので、いやですよね。

今回はMisenka/Mishe_underwear参照するボーンを書き換えてあげることで、対応します。

ちゅーこって早速やっちゃいましょっ。

Mishenka/Mishe_underwearSkinnedMeshRendererが参照するm_Bonesを発見する

まずアバタープロジェクトのシーンファイル、ここでは./Assets/Scenes/SampleScene.unityをテキストエディタで開きます。

4

テキストを検索して、Mishenka/Mishe_underwearのGameObjectを見つけます。

5

さっきからテキトーに「紐づいたボーン」とか言っていますが、その実際の紐づきはSkinnedMeshRendererというコンポーネントに記述されています。 (残念ながら、その「紐づき」がUnity上から操作できないみたいなので、テキストエディタで開く必要があります。えーん。)

見つけたGameObject中のm_Componentのいずれかが、そのSkinnedMeshRendererです。

今回はその2つめでした。 (1つめはTransformでした。)

6

そのfileIDで検索して、SkinnedMeshRendererの記述を見つけます。

7

そこにm_Bonesというのがあるので、場所をマークしておいてください ✨

8

壊れていそうなのがまるわかりですね!

これを正しく書き換えれば、全てが完了します。

Mishenka/Mishe_wearSkinnedMeshRendererが参照するm_Bonesをコピーする

「正しく書き換える」って簡単にいいますが、実際にどうすればいいのでしょうか。

実は我々は既に、これが正しかった頃の値をまだ持っています。

Mishenka/Mishe_wearunderwearでないGameObject。例えばMishe_shoesとかでもいけるかも。)のSkinnedMeshRendererが持っているm_Bonesを、先ほどMishenka/Mishe_underwearにしたように見つけます。

9

10

11

めっちゃ正しそう。

これをコピーしちゃいましょう。

直す!!

最後にコピーした内容を、最初にみつけたMishenka/Mishe_underwearSkinnedMeshRendererにあるm_Bonesに上書きします。

12

☝ コピーっ!

13

☝ ペーストしたよっ!

できた!!

できた!!

14

終わりだよ。


  1. 今回下着を着せたい、目的のアバター。
  2. ここで「対応付けてコピーする」とは、MisheのボーンをMishenkaに入れ子にしてコピーする「あの作業」を指します。アバター改変で服とか着せる、いつものあの作業ですね。ここで説明は割愛します。

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。