UnityのClothを使って髪、鎧、マントの動きを作成する

記事内に広告が含まれています。

今回はUnityのClothを使って、髪、鎧、マントの形状を変化させたいと思います。

UnityのClothについては

UnityのClothを使ってPlaneに布の表現を加え、形をリアルタイムに変更する
UnityのClothを使うと、布の表現をする事が出来るようになり、登録した別のコライダとの接触で形状をリアルタイムに変化させる事が出来ます。

でやりました。

今回はそれを応用してみます。

Clothを使うと布だけでなく、髪も動かす事が出来ます。

スポンサーリンク

髪、鎧、マントの作成

今回の機能を作成する前に、髪、鎧、マントの3DCGを用意する必要があります。

わたくしの場合はMakeHumanでキャラクターを作り、その時に設定した髪を使用しますが、キャラクターの髪のメッシュがキャラクターの体と別にしてあれば問題ありません。

髪の毛のメッシュ

鎧は腰の部分だけを適当に作りました。

腰の下の鎧

マントは

GAME ASSET TUTORIAL - How to Create a Flag in Blender (PART 1/2)
Unity 5.6 Cloth/Flag Tutorial. In this Video, I'm showing Step by Step how I Create Flag Using Blender And Painting it w...

の動画を参考にしつつ、初心者なりに作成しました・・・・(;一_一)

マントの3DCG

まぁ3DCGの出来栄えについてはスルーしてください。

髪、鎧、マントにClothコンポーネントを取り付けとEdit Constraintsの設定

キャラクターの腰のボーンの子要素に鎧、胸のボーンの子要素にマントを配置します。

キャラクターの髪のメッシュゲームオブジェクト、鎧、マントのAdd ComponentからPhysics→Clothを取り付けます。

ボーンの子要素に鎧、マントを配置

マントはspine_03の子要素、鎧はspine_01の子要素に配置しました(ボーンの作り方、名前の設定によって変わります、ボーンの位置に合わせた子要素に設定します)。

鎧、マントを着せたキャラクター

↑のような感じで、鎧とマントを着せます。

Clothを設定すると一緒にSkinned Mesh Rendererコンポーネントも取り付けられるので、

髪、鎧、マントそれぞれのSkinned Mesh RendererのMeshにそれぞれのメッシュを指定します。

例えばマントであれば、

SkinnedMeshRendererのMeshにMantleを設定

↑のようにマントのメッシュを設定します。

髪のEdit Constraints

Clothを設定したゲームオブジェクトには制限値を与え、動かない部分を作らないと自由に動き回ってしまいます。

そこで頂点を固定したい部分と動く部分に分け、動きの制限を加えていきます。

選択モードをSelectにすると、マウスのドラッグで範囲内の頂点を選択出来ます(Shiftキーを押しながら繰り返し選択も可能)。

Paintだと一つ一つ選択出来ます。

まずは髪の制限を加えます。

髪のMaxDistanceを設定

髪の頭皮に付いている部分をSelectで選択し、Max Distanceを0にします。

Max Distanceは布が動く最大距離を指定するものなので、0に設定するとその頂点部分は動かないようになります。

鎧のEdit Constraints

鎧の制限を加えます。

鎧のMaxDistanceを設定

腰の部分の頂点を選択し、Max Distanceを0、鎧の下の頂点を選択し、Max Distanceを0.05に設定します。

すでに鎧と接触を判定するコライダの設定がされているので見づらいです・・・・。

マントのEdit Constraints

マントの制限を加えます。

マントのMaxDistanceを設定

マントのキャラクターに付いている部分の頂点を選択し、Max Distanceを0にします。

他の頂点は何も設定しないので、かなりヒラヒラ動くはずです。

髪、鎧、マントの頂点に設定するMax Distanceの値を少しづつ調整すれば少しづつ制限を変える事が出来ます。

例えばマントの場合、付いている肩の部分はMax Distanceを0にし、その下の頂点群は0.01、その下の頂点群は0.02としていけば、下の方にいけばいくほど動きが大きくなっていきます。

頂点群のMaxDistanceを徐々に上げて設定する

↑は上から0、0.01、0.02と少しづつMax Distanceの値を上げて設定しました。

鎧、マントの接触コライダの作成とClothに設定

鎧、マントと接触するコライダを作成し、接触した場合に鎧・マントの形状が変化するようにします。

鎧用のコライダの作成と設定

まずは鎧と接触するコライダを作成します。

鎧と接触する可能性があるのはキャラクターの足です。

そこでキャラクターの両足のボーンにCapsuleColliderを設定していきます。

わたくしのキャラクターの足のボーンの名前はthigh_lとthingh_rなのでそこにコライダを設定します。

足のボーンにCapsuleColliderを設定

↑のようにサイズと位置を調整し、Is Triggerにチェックを入れます。

ボーンのゲームオブジェクト自体にコライダを設定したので、コライダの位置を調整する時はコライダのCenterの値を調整します。

個別にTransformで調整したい時は、ボーンの子要素に空のゲームオブジェクトを作成し、そこにCapsule Colliderを設定し、位置を調整します。

こちらの方がシーンビューで位置調整や角度調整が出来るので細かい設定が可能です。

足のボーンに設定したコライダの形

↑のようにコライダが設定されました。

鎧のインスペクタを表示し、ClothのCapsule CollidersのSizeを2とし、そこに両方の足に作成したコライダを設定します。

鎧のClothに足に作成したコライダを設定

マント用のコライダの作成と設定

次にマント用のコライダを作成します。

spine_03という名前のボーン(胸の辺りのボーン)にCapsuleColliderを取り付け、Is Triggerにチェックを入れサイズ調整をします。

マント用のコライダの作成

↑のようにコライダのサイズを調整しました。

マントは鎧との接触も考慮する必要があるので、鎧にCapsuleColliderを作成し、Is Triggerにチェックをします。

マント用に鎧のコライダを作成

↑の円状のコライダがマントとの接触を判定するコライダです。

コライダの作成が終わったので、マントのClothのCapsule Collidersのサイズを2にし、今作成した上半身のコライダと鎧のコライダを設定します。

マントのClothのコライダに接触対象のコライダを設定

↑のように設定しました。

これでClothのコライダの設定が終わりました。

髪には特別に接触するコライダは設定しないようにしました。

裏側も描画させる

鎧やマントはペラペラのメッシュで厚みを作成していない為、裏側から見ると標準のシェーダ―スクリプトだと透けて見えてしまいます。

そこで裏側からカメラで写した時も描画するようにする為、独自にシェーダ―スクリプトを変更します。

Unityでキャラクターの服・防具の着せかえを出来るようにする
blenderで作成した服、鎧や足をガードする装備等を作成した後Unityに取り込み、キャラクターが装備を着せかえることが出来るようにします。

詳しくは↑を参照してください。

アセットストアにもシェーダ―スクリプトがあるかもしれません。

髪、鎧、マントの動きを確認する

まずは髪、鎧、マントにClothが設定されていない時の動きを確認してみます。

↑のようにマントはただのゲームオブジェクトなので堅いものが付いている感じ、鎧部分は元の形状のまま変わらないので足にめり込んでいます。

次はClothを設定した状態です。

↑のように、髪が自然と動き、鎧は足の動きに合わせて動き、マントもヒラヒラと舞っています。

マント用の上半身のコライダの縦の長さが足りないので、一部マントが体にめり込んでいる時がありますが・・・。

Clothの設定を変更すれば重い布、軽い布の違いを出す事も出来そうですね。(^-^)

タイトルとURLをコピーしました