【Unity】Magica Cloth最速入門【揺れ物】

# はじめに
近年のVTuberやVRMモデルの流行から、
スカートや髪の毛へ物理演算揺れを与えられるクロスシミュレーションの注目度が高まっています。
その揺れ物系システムの中でも特に処理品質が高いのがUnity AssetStoreで公開されている[Magica Cloth](https://assetstore.unity.com/packages/tools/physics/magica-cloth-160144?locale=ja-JP)です。

https://assetstore.unity.com/packages/tools/physics/magica-cloth-160144?locale=ja-JP

ところが、なんとQiitaにはMagica Clothに関する記事が一切存在しませんでした。
（執筆当時）（ほんまか、、？）
![SnapCrab_NoName_2022-9-27_0-5-26_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/34cf16df-6796-95ab-58d8-7fb8fda3a6f2.png)


ということで、
自称Qiita初の「Magica Cloth入門記事」を書く運びとなりました。
よろしくお願いします。

なおMagica Clothの入門記事自体は世間にいくつも存在しているので、
Magica Cloth自体の詳細や、より詳しい解説はそちらに任せるとして、
この記事では「とにかくスカートを揺らしたい」という夢を叶えるための
最速作業行程だけを解説していきます。

# 作業環境
Magica Cloth（というか揺れ物系）は特に環境依存による問題が発生しやすいため、
アセット自体のバージョンやUnityバージョンなどは注意しておきましょう。
Unityのメジャーバージョンが合っていれば大体は正しく動くはずです。

今回は以下の通りのバージョン構成で解説します。

|  | version |
|:-:|:-:|
| Unity |2022.1.6f1   |
|  Magica Cloth |  1.12.9 | 
|  Burst |  1.7.4| 
|  Jobs | Version 0.70.0-preview.7| 
|  VRM関連 | v0.104.2| 



# 下準備

## Magica Clothインポート後
Magica ClothではUnityプロジェクトデフォルトでは入っていない
**Burst**と**Jobs**パッケージがそれぞれ必要になります。
Magicaをインポートしただけでは大量の赤エラーが出るはずなので、
（順不同ですが）BurstとJobsをPackageManagerからインポートしましょう。


Burstパッケージは既に公式提供が始まっているので、
PackageManagerのPackagesからUnity Registryを選択後に現れる一覧に
Burstがあるはずです。
検索窓を活用して絞ると良いでしょう。![SnapCrab_NoName_2022-10-4_18-37-1_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/df804297-ddad-d356-6dad-a4162d5c4ef7.png)




Jobsパッケージはまだ公式提供が始まっておらず（Experimental）、
パッケージ一覧には表示されないので、
左上の+ボタンから
`Add package from git URL`で表示されるボックスに
`com.unity.jobs`を入力してダウンロードしてきましょう。

![unity2021-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/dda1edbb-4414-e84a-a318-f1f658fb845e.jpeg)

![SnapCrab_NoName_2022-10-4_18-35-13_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/16e992e4-7e1c-a828-c5d5-3dcdd1bbce1e.png)



## VRMを扱う準備
今回はテスト用モデルとして[ニコニ立体ちゃん](https://3d.nicovideo.jp/works/td32797)を採用しました。
VRMモデルをロードするためにVRM各種パッケージをインポートしておきましょう。
**VRMモデルではないFBXなどを扱う場合この工程はスキップして大丈夫です。**
Releaseページ下部にあるUPMリンクから4つのパッケージをインポートします。

![SnapCrab_NoName_2022-10-4_18-51-23_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/b95d97ea-7b28-46af-d5bd-d1c430221474.png)

https://github.com/vrm-c/UniVRM/releases

VRMパッケージがインポートし終わったら、
[ニコニ立体ちゃん](https://3d.nicovideo.jp/works/td32797)をインポートします。

VRMパッケージのインポートが正しく済んでいれば
`AliciaSolid`のPrefabが生成されるはずです。

![SnapCrab_NoName_2022-10-4_18-53-53_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/d5baa144-ca8e-3b38-d494-258f8b76597e.png)


# 本作業
## 1.既存揺れ物系の除去
VRMモデルはデフォルト機能として`VRM Spring Bone`という揺れ物機能がありますが、
今回はMagicaClothで置き換える形になるので、全て除去しておきます。

除去するコンポーネントは以下の通りです。
`VRMSpringBone` `VRMSpringBoneColliderGroup` ←シーン検索用コピペ文字列

コンポーネント消し忘れがないように、シーン内検索を活用すると良いでしょう。
![SnapCrab_NoName_2022-10-4_19-0-1_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/5e876a81-fd22-e3a8-051f-92df10bc3e2d.png)


## 2.シーンにMagicaPhysicsManager設置
Magicaの全体計算を行う`MagicaPhysicsManager`をシーンに設置します。
既にMagica側でPrefab化されているので、
`Assets/MagicaCloth/Res/Prefab`に配置されている`MagicaPhysicsManager`を
シーンに置いておきましょう。

![SnapCrab_NoName_2022-10-4_19-5-6_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/be4e576f-80c2-0d1d-4a10-b274a1789a5a.png)

なお、Magica公式ドキュメントで記載されているアセットパスと異なるので
（多分バージョンアップで変わった）
Projectビューで`MagicaPhysicsManager`を検索してしまうのが早いと思います。

ちなみに`MagicaPhysicsManager`では色々なパラメータが設定できますが、
基本的にデフォルト状態で問題ないと思います。
もし既にパフォーマンスに難があるなどといった場合では、
公式ドキュメントの[PhysicsManager](https://magicasoft.jp/magica-cloth-physics-manager/)のページを参照し、
各パラメータを調整するとよいでしょう。


![SnapCrab_NoName_2022-10-4_19-6-46_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/8bf9f073-bf95-718d-e247-801d00a87d12.png)

## 3.Clothセットアップ
3dモデルで衣服や髪の揺れを表現する場合、
**既にボーンが組み込まれた物を揺らすケース**と
**ボーンがないorメッシュ頂点そのものを直接揺らすケース**があります。

MagicaClothでは、
前者は**BoneCloth機能**、後者は**MeshCloth機能**として
両方のパターンに対応できるようになっています。
他にもBoneSpring、MeshSpringといった機能がありますが、
発展的内容なので今回はパスします。


## 3a.BoneCloth
BoneClothは前述の通り、既にボーンが組み込まれているメッシュを揺らすための機能です。
髪の毛や一部のスカートなどはモデルの時点でボーンが組み込まれている事が多いので、
こちらを使っていきましょう。

### 揺らすルートボーンの設定
初めにどのボーンを揺らすかの設定を行います。
今回扱うニコニ立体ちゃんの場合は大きく分けて
`hair1_L` `hair1_R` `mituami1` の3つの髪の束を揺らしたいと思います。

![SnapCrab_NoName_2022-10-6_21-19-39_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/e256a1d3-b52a-6833-4a3a-246ce859bc58.png)


まずはキャラクターモデルのRootにCreateOtherから
`Magica Bone Cloth`オブジェクトを追加します。

![SnapCrab_NoName_2022-10-6_21-21-40_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/591de635-0f5f-ff94-f0a3-991897c9a221.png)

インスペクタを見ると赤エラーが出ていますが、
これはClothのデータが未構築であるためでこの後解消します。

![InkedSnapCrab_NoName_2022-10-6_21-23-18_No-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/47cae9d6-a72d-276a-b194-21e09871a417.jpeg)

次に揺らすボーンのRootを`MagicaBoneCloth`コンポーネントのRoot Listに参照を渡します。
渡すオブジェクトは先ほど確認した`hair1_L` `hair1_R` `mituami1` の3つになります。

![SnapCrab_NoName_2022-10-6_21-28-56_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/e9769d98-c61a-8ab5-2f45-52af147c0622.png)

### どのボーンを揺らすか

ボーン参照を渡したら下にある青ボタンの`Start Point Selection`から
髪の毛ボーンの「どれを根本として固定するか、どれを毛先として揺らすか」を設定します。

`Start Point Selection`を押すとSceneビューがどのボーンを揺らすか設定するためのギズモ表示に変化します。
ボーン座標に赤や緑の球体が表示され、それらを編集することになります。
ただ、デフォルト状態ではそれらのポイントサイズが小さく表示されるケースがあるようなので、
インスペクタのPointSizeからギズモ表示のサイズを調整するとよいでしょう。
![SnapCrab_NoName_2022-10-6_21-33-31_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/46909b4e-ee96-5a99-a7e5-04f68ed14c91.png)
![SnapCrab_NoName_2022-10-6_21-34-16_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/27014e4c-3d70-3bec-8d51-e0192f00739a.png)

このモードでは表示されているポイントを3種類のTypeに分けて、
物理演算の挙動を設定することが目的です。

赤のポイントが**固定されている根本（毛根）**、
緑のポイントが**移動することができる毛先**、
灰のポイントが**物理演算の計算から除外する完全無効ポイント**になります。

上の画像では根本ボーンにあたる部分が赤くマークされており、
その下に続くボーンが緑色で移動することができると設定されています。

ニコニ立体ちゃんのような比較的シンプルな髪の毛の場合、
MagicaCloth側で自動的に設定されるデフォルト状態のType設定で問題ありません。
逆にハーフアップなど複雑な髪型の場合は、
自力でどのボーンを揺らすか・固定するかを塗る必要があります。

デフォルト状態から変える場合、各ポイントをクリックすることで
そのポイントのTypeを変更することができます。
インスペクタに表示されている
`Move Point` `Fixed Point` `Invalid Point`をクリックした後、
Scene上で各ポイントをクリックするとその選択したTypeに塗ることができます。
詳細な操作は以下の動画をご覧ください。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Qiita記事に埋め込む用 <a href="https://t.co/NX937jllUk">pic.twitter.com/NX937jllUk</a></p>&mdash; ごんびぃー𓊍 (@GONBEEE_project) <a href="https://twitter.com/GONBEEE_project/status/1578004623805202432?ref_src=twsrc%5Etfw">October 6, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ポイントのType設定が終わったらインスペクタから
`End Point Selection`を押して設定を保存・反映させましょう。

### どのように揺らすか
ポイント設定が終わったらそれらのボーンをどのように揺らすかのパラメータ設定をしますが、
設定項目が非常に多い上、それぞれ複雑なパラメータなので
基本的にMagica側で用意されている揺れ方のプリセットを活用するとよいでしょう。

公式ドキュメントによるとこのPresetボタンはv1.8.4から実装された物のようで、
環境によって表示されていない場合があります。
その際は右にある`Save/Load`から`MagicaCloth/Preset`フォルダ内の各種JsonファイルをLoadするとよいでしょう。

![InkedSnapCrab_NoName_2022-10-6_21-55-50_No-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/30c05e46-f42a-d4e8-501a-86b54fb77da4.jpeg)

プリセットパラメータも数多く存在します。
今回は下から3つ目の`PonyHair`を設定します。

![SnapCrab_NoName_2022-10-6_21-56-45_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/c5d58544-c61d-5f91-5832-fd46ce7f0e08.png)

各種パラメータが変更されたらインスペクタ下部にある`Create`ボタンで、
Clothデータを作成・反映させましょう。
反映が終わると最初に赤エラーが表示されていた部分に
Clothのデータが表示され、白フキダシに変化するはずです。
これで髪の毛が物理演算に従って揺れるようになりました。

![SnapCrab_NoName_2022-10-6_22-2-52_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/164a464b-7232-359d-852e-85f5b9a8a42e.png)

ニコニ立体ちゃんに任意のAnimatorControllerを指定、
Unityを実行して髪の毛の挙動を確認してみましょう。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Qiita記事に埋め込む用2 <a href="https://t.co/lR1MjdA90k">pic.twitter.com/lR1MjdA90k</a></p>&mdash; ごんびぃー𓊍 (@GONBEEE_project) <a href="https://twitter.com/GONBEEE_project/status/1578008990239272963?ref_src=twsrc%5Etfw">October 6, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

今回はMagicaCloth提供のプリセットを使ったので、
髪の毛の揺れ方に「ニコニ立体ちゃんらしさ」みたいな物はありませんが、
とりあえず揺らすだけならばこれらの手順で実装することができました。


## 3b.MeshCloth
MeshClothはBoneClothとは異なり、ボーンが設定されていない物を
メッシュを直接変形させることで揺らすための機能となります。
スカートなど衣類はボーンが設定されていないケースがあるため、
それらはMeshClothを活用することになるでしょう。
（ニコニ立体ちゃんに関してはスカートにもボーンがあるが、
今回は説明のためMeshClothを使う）

[公式ドキュメント](https://magicasoft.jp/magicaclothmeshclothstart/)によるとBoneClothと異なり、
メッシュの頂点単位で物理演算計算と、その結果を反映させる処理が発生するため
BoneClothよりも計算負荷が高くなる傾向があるそうです。
ボーンがあるモデルならBoneClothを使うほうが負荷軽減に繋がりそうです。


### Deformerの設定
まずメッシュを変形させるためのRenderDeformerというコンポーネントを
セットアップする必要があります。
揺らしたいメッシュ（今回はスカート部分）のオブジェクトを選択し、
`Add Component`から `MagicaRenderDeformer`を追加します。

`MagicaRenderDeformer`にも`Create`ボタンがありますが、
アタッチと同時に自動的にデータを取得・更新するので、
ボタンを別途押す必要はありません。

![SnapCrab_NoName_2022-10-6_22-20-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/9f313d84-40fa-138e-d56f-dc32a2032b48.png)

### VirtualDeformerの設定
上の項目で設定したRenderDeformerを1つの大きなメッシュとして計算するための
バーチャルデフォーマーを設定する必要があります。
モデルのRootを右クリックし、Create Otherから`MagicaVitualDeformer`を追加します。
![SnapCrab_NoName_2022-10-6_22-24-24_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/41640745-dad7-55c4-e76a-9ca99dd91cb8.png)

追加した`MagicaVitualDeformer`の`Render Deformer List`に
先ほどアタッチした`MagicaRenderDeformer`の参照を登録します。
コンポーネント内に関連するRenderDeformerを自動的に探索する
`All Select`ボタンがあるので、これを活用するとよいでしょう。

![SnapCrab_NoName_2022-10-6_22-27-47_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/63b12bf6-31d8-a072-a4bb-6b4881431d2b.png)

参照を渡し終えたらコンポーネント下部の`Create`ボタンから
計算用メッシュデータを作成しましょう。


### VirtualDeformerのリダクション
デフォルト状態では計算用メッシュの頂点数が多く、計算負荷が非常に高いため、
`Reduction Setting`から計算用メッシュのリダクションを行います。
コンポーネント上部にある`Open Cloth Monitor`をクリックすると
Sceneビューに計算用メッシュが紫色で表示されます。
この紫メッシュの密度や頂点数を見ながら`Reduction Setting`を操作しましょう。

リダクションをする際にいじるパラメータは
`Merge Vertex Distance`と`Merge Triangle Distance`の2つです。
これらの数値を変更→`Create`ボタン押下を繰り返し、
ちょうどいいパラメータ設定を模索しましょう。
今回ニコニ立体ちゃんでは以下のような設定になりました。
メッシュ密度が適度に軽くなっていることがわかります。

![SnapCrab_NoName_2022-10-6_22-33-34_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/98858804-57b6-b621-1654-6f67e2e66029.png)


### MeshClothの設定
ここから先は前述のBoneClothとほとんど変わらない操作になります。
まずキャラクターモデルのRootからオブジェクト追加で
`Magica Mesh Cloth`を追加します。
![SnapCrab_NoName_2022-10-6_22-36-7_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/27889eab-5461-8889-565a-b97539a4e9ff.png)


`MagicaMeshCloth`コンポーネントの上部に`Virtual Deformer`の参照を渡すボックスがあるので、
そこに先ほど作成した`MagicaVirtualDeformer`の参照を渡しましょう。
`Start Point Selection`をクリックすると
BoneCloth設定時と同じような表示に切り替わり、
どの頂点を揺らすか・固定するかのType塗りができるようになります。
ただBoneClothとは異なり、自動的にはType選択がされず
すべてのポイントがInvalid状態で表示されると思います。

大変ですが、各ポイントを地道に塗っていきましょう。

![SnapCrab_NoName_2022-10-6_22-38-6_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/104e2107-2ff6-5657-ec88-9ecac9e69bf8.png)

ドラッグするとなぞった部分を一気に塗ることができるので、
Sceneビューの平面投影などを活用して塗るとよいでしょう。

![SnapCrab_NoName_2022-10-6_22-41-2_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/e20a7d62-1add-6031-efe6-2412f5229a45.png)

ポイントが塗り終わったら
コンポーネント下部の`Parameters`を設定しますが、
こちらも先ほど同様にMagica公式提供のプリセットを活用します。
今回はスカート部分なのでプリセット`Skirt`を使います。

![SnapCrab_NoName_2022-10-6_22-42-56_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/0829ce0d-ad94-1bac-4712-f3f1acc9c499.png)

パラメータの設定が終わったらコンポーネント下部の`Create`ボタンで
Cloth情報を保存・反映させましょう。

![SnapCrab_NoName_2022-10-6_22-44-8_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/4acf0ea8-ce4b-18c9-4c1c-a13337f3060d.png)

Unityを実行するとスカートが物理演算に従って揺れていることが分かると思います。
ただこちらもBoneCloth同様「ニコニ立体ちゃんらしさ」といったものはなくなっているので、
キャラクターの属性や人間性を追求する場合は各種パラメータの設定をいじることになります。
また動画を良く見るとわかりますが、
太ももやパンツがスカートを貫通している場所があるので、
次はそういった貫通を回避するためのColliderセットアップを行っていきます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Qiita記事に埋め込む用3改 <a href="https://t.co/FeKYgXP1mk">pic.twitter.com/FeKYgXP1mk</a></p>&mdash; ごんびぃー𓊍 (@GONBEEE_project) <a href="https://twitter.com/GONBEEE_project/status/1578019149552312323?ref_src=twsrc%5Etfw">October 6, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



## 4.Colliderセットアップ
### 上半身Colliderの配置

ここで設定するColliderはBoneCloth・MeshCloth両方とも共通で使える操作になります。
髪が特に貫通しやすいのは肩周り・胴体や上腕周辺、
スカートが貫通しやすいのはお尻・太もも周辺となります。

Colliderは上に挙げた各部位のボーンの子オブジェクトとして追加する形で
キャラクターに紐づけます。
設置のイメージは通常のSphereColliderやCapsuleColliderと同じです。

MagicaClothから提供されているColliderは以下の3種類です。
| Collider名 | 特徴 |
|:-:|:-:|
| MagicaSphereCollider  |  球体。シンプルで計算が早い。 |
|  MagicaCapsuleCollider | カプセル。上下の球体のサイズを別々に変更できる。  |
| MagicaPlaneCollider  | 平面。地面・壁などに設定する。  |


例えば上腕なら`MagicaCapsuleCollider`、
胴体・お尻なら`MagicaSphereCollider`を使うことになるでしょう。
肩幅の広いモデルの場合は背中の面に`MagicaPlaneCollider`を設定するのもよいでしょう。

まずはBoneCloth時に設定した髪の毛の揺れが胴体に貫通しないように、
胴体・腕周りに各種Colliderを設定していきます。

初めに`LeftArm` `RightArm`に`MagicaCapsuleCollider`を追加します。
![SnapCrab_NoName_2022-10-8_0-19-29_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/22f6e4dd-2408-8ff9-66dc-e17bee1ea5cf.png)

![SnapCrab_NoName_2022-10-8_0-20-47_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/4a02fb9b-b83e-a3a8-1e7a-5b1adeef8b4b.png)

追加直後は上の画像のように巨大なColliderになっているため、
`MagicaCapsuleCollider`コンポーネントの各パラメータを操作して、
上腕にあう適切な値に変更しましょう。
編集時はSceneビュー表示をWireframeにしておくとColliderの大きさがわかりやすくなります。

今回、左腕のColliderはこのようなパラメータで設定しました。
同様の操作を右腕側でも行います。

![SnapCrab_NoName_2022-10-8_0-23-30_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/154d3ef7-8fb6-0056-3b70-443cd436be5a.png)

右腕側のパラメータは以下の通りです。
ここで豆知識ですが、Inspectorビューのコンポーネント右上にある3点ボタンから`Copy Component`して、
反対側の腕コンポーネントに`Paste Component Value`をすると
1回設定した値を割と簡単に転送することができます。
もちろんパラメータは鏡写しになってしまうので手直しは必要ですが、
左右を見比べて数値を入力する手間が省けるかもしれません。

![SnapCrab_NoName_2022-10-8_0-26-40_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/c0aa1cd3-3e10-ce0a-10b7-6782b60681a1.png)


次に胴体部分へ`MagicaSphereCollider`を設定します。
今回は球体を使いますが、
モデルによってはカプセル型や平面コライダーでも十分機能する可能性があります。
モデルの胴体形状を見てアドリブで判断しましょう。

胴体Colliderは首ボーンに相当する部位の1階層上（今回は`Spine3`）に
配置すると理想的な動きをすることが多いです。

![SnapCrab_NoName_2022-10-8_0-32-21_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/d28dc586-12c7-a6a7-dd40-baa5be8fb720.png)

今回は以下のように球体を配置しましたが、
ウエスト周りにも髪が貫通してしまう場合は更にColliderを追加するとよいでしょう。
ただ2つ以上`MagicaSphereCollider`を設置する場合は、
`MagicaCapsuleCollider`に変更してまとめてしまうというのも一つの手段です。
このあたりは実行させて様子を確認しつつ変更してください。

![SnapCrab_NoName_2022-10-8_0-34-51_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/d5b0020c-db65-b995-79a5-2c555ee2acea.png)


### 下半身Colliderの配置
MeshCloth用の下半身Colliderも上半身で行った操作と同様に、
両ふともも・お尻周辺にCapsuleやSphereColliderを設置していきます。

先ほどはTポーズの腕に設定したので問題ありませんでしたが、
`MagicaCapsuleCollider`はデフォルトでは水平方向にColliderが配置されます。
足の場合は上下方向に配置する必要があるので、
以下の画像で丸をつけた当たり判定の軸方向`Axis`を適当な値に変更します。（今回はY）


![InkedSnapCrab_NoName_2022-10-8_0-41-43_No-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/0ea3682c-85a5-3161-1691-d7a3260c3365.jpeg)

先ほど腕に設定したように各パラメータの値を適当な数字に変更します。
足Colliderは以下のような値になりました。

![SnapCrab_NoName_2022-10-8_0-47-26_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/a35391a4-a5b5-eea3-6324-7ab1c8b99695.png)

ここで豆知識ですが、
「足の付け根のほうを太くする」「膝側のほうを太くする」という2択は
各モデルに合わせて選択する必要があります。
例えばニコニ立体ちゃんの場合スカートが極端に短いため、
**付け根を太く・膝側を細くする**と自然な挙動になります。
逆にロングスカートを履いたモデルの場合、
**付け根を細く・膝（というか足先全体）を太くする**と干渉が減り
自然に見えるケースもあります。
このあたりの当たり判定サイズの設定は各モデルに合わせて柔軟に変更していきましょう。

更に豆知識ですが、
各Colliderのサイズを編集する際に
Sceneビューの平行投影を活用すると身体各部位のサイズに合わせやすくなります。
ギズモの平行投影はXYZ各方向の表裏から確認できるため、
様々な角度からColliderサイズ・身体サイズを比較するとよいでしょう。

情報提供：[にー兄さん](https://twitter.com/ninisan_drumath)

![SnapCrab_NoName_2022-10-8_1-20-12_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/ac715645-c703-c3d1-61e3-75851ab98ade.png)





### Colliderの参照渡し
各部位へColliderが設定し終わったら、
BoneCloth・MeshClothにそれぞれモデル内にどのColliderが存在するかの参照を渡します。
それぞれのコンポーネントから`Collider List`を探してください。
その下にモデル内から全てのCollider参照を自動的に取得してくる`All Select`ボタンがあるので、
これを押してColliderへの参照を取得しましょう。


![SnapCrab_NoName_2022-10-8_0-54-9_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/42ee51ca-af07-8ad7-26ff-073ab177a827.png)

これでColliderの参照渡しは完了ですが、
絶対に衝突しえない組み合わせが存在します。
例えばBoneClothを設定した髪の毛は基本的に足Colliderとは衝突せず、
MeshClothを設定したスカートは上半身Colliderとは衝突しません。
処理負荷軽減のため、
それぞれのコンポーネントで衝突しえない組み合わせのColliderは
除去しておくことをオススメします。

ただ、ニコニ立体ちゃんの場合髪の毛が長く、足Colliderに侵入する可能性はありえます。
逆にスカートは上半身に関わらないので腕周りのColliderは除去するとよいでしょう。
（逆立ちアニメーションを流し込む場合を除く）

![InkedSnapCrab_NoName_2022-10-8_0-55-36_No-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/8cb4a373-553c-cc26-7029-ade084393896.jpeg)

### 衝突範囲の設定
Colliderの参照を渡し終わったら、
それらのColliderと髪の毛やスカートがどれほどの範囲で衝突するかの設定を見直します。
BoneCloth・MeshClothで完全に共通の操作になるため、
BoneCloth側でのみ説明します。

操作すべきは以下の画像で示す
`Radius` `Collider Collision`の2箇所です。
`Collider Collision`の方はチェックマークが入っていればOKです。
（当たり判定の参照を渡した時点で、自動的にチェックが入るはず）

先ほどColliderを設置した際に身体の各部位に合わせてColliderサイズを調整しましたが、
この`Radius`パラメータは髪の毛やスカート側の衝突範囲の調整をする箇所です。
コンポーネント上部にある`Open Cloth Monitor`をクリックして、
Sceneビューにパラメータ状態を表示しながら編集すると分かりやすいと思います。

![InkedSnapCrab_NoName_2022-10-8_1-4-34_No-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/b46d6cf6-3b86-094b-807a-26b6fd5744c1.jpeg)


`Radius`内のパラメータ詳細は以下の通りです。
| Param | 内容 |
|:-:|:-:|
|  start |  ボーンの根本側のサイズ。下記のendを非アクティブにすると全ボーンに対してこの値が適用される。 |
| end  | ボーンの先端側のサイズ。`MagicaCapsuleCollider`の`Start Radius/End Radius`と同じ感覚。 |
|  curve |  上記2つの数値の間をどのような曲線で補間するか。 |

これらのパラメータは実際にいじってみると感触がつかめると思います。
毛先のほうが大きく動きやすいため、多少大きめに当たり判定を設定しておくとよい気がします。

![SnapCrab_NoName_2022-10-8_1-9-47_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241210/097f80e5-6d8a-25fa-da0e-f94504837cf5.png)


### 最終適用
Colliderの参照渡し、Cloth側の衝突範囲設定がすべて終わったら
コンポーネント下部の`Create`ボタンを押して、
これまでの編集状態を保存・反映させましょう。

Unityを実行すると髪やスカートが身体に貫通しなくなっているはずです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Qiita用 <a href="https://t.co/sWkaXMaCww">pic.twitter.com/sWkaXMaCww</a></p>&mdash; ごんびぃー𓊍 (@GONBEEE_project) <a href="https://twitter.com/GONBEEE_project/status/1578421223112855552?ref_src=twsrc%5Etfw">October 7, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

もしColliderサイズが大きすぎてスカートが跳ね上がったり、
お尻周りが貫通してしまったりする場合は
数ステップ戻ってColliderサイズ変更・Cloth側サイズ変更を繰り返して
ちょうどいい塩梅を探してください。



# 完成！ & おわりに
おつかれさまでした！！
ここまでの手順を完全コピーしてMagicaClothセットアップを行うと
恐らく一通りの操作方法が身につくはずです。

揺れ物を設定する上で特に重要なのは身体を貫通させないためのCollider周りだと思うので、
Colliderの種類、設置階層、Collider自体のサイズなど
様々なパラメータの組み合わせを自分の持つモデルに合わせて試行錯誤してみてください。

今回は複雑なので触れませんでしたが、
Clothコンポーネントの各パラメータをいじると揺れ方の特性などを変えることが可能です。
キャラクターの属性や髪の毛の硬さ、来ている衣服の材質などを表現することもできると思います。
もちろん習得には時間がかかると思いますが、
キャラクターをより「そのキャラクターたらしめる」味付けを行うことができます。
冒頭でも書いた通り、近年VTuberやVRMモデルが流行しているので、
この機会に是非[Magica Cloth](https://assetstore.unity.com/packages/tools/physics/magica-cloth-160144?locale=ja-JP)を習得して、マイアバターを手に入れてみてはいかがでしょうか。


最後まで読んでいただきありがとうございました。
もし記事内で分からないことや間違っている部分がありましたら、
コメント欄か[ごんびぃー](https://twitter.com/GONBEEE_project)までご連絡をいただければと思います。