【Unity】Cloth コンポーネントを使って布の動きを表現する方法

この記事ではUnityのコンポーネントのひとつ「Cloth」を使用して、3Dモデルのメッシュを布のように表現する方法について説明します。
コンポーネントの使用方法から、基礎的な使い方を説明します。
物理表現を理解し、VRの制作に活かしましょう!

Cloth Simulationのサンプルを作る

サンプル

今回作成する、Cloth コンポーネントをアタッチしたPlaneがSphereに衝突するシミュレーションです。
どのようなものが作れるのか、確認してみましょう。

準備

Unityのプロジェクトを起動し、新しいシーンを作成しましょう。
今回シーン内には、Cloth コンポーネントをアタッチするPlaneと、それに衝突するSphereを作成します。
ヒエラルキーウィンドウ上で右クリックをし、3DModel > Plane 及び Sphereを選択し、作成しましょう。

PlaneのTransformは以下のようにします。

Plane Transform

SphereのTransformは以下のようにします。

Sphere Transform

シーンウィンドウは以下のようになります。

シーンウィンドウ

これで準備ができました。

Cloth コンポーネント

PlaneにCloth コンポーネントを追加しましょう。
Planeを選択した状態で、インスペクターウィンドウの「Add Component」から「Cloth」を選択して追加しましょう。

Clothを選択

これでCloth コンポーネントを追加できました。
コンポーネントを見ると、さまざまなプロパティを調整できます。

プロパティ

Cloth コンポーネントの各プロパティと機能は以下のようになります。

プロパティ 機能
Stretching Stiffness クロスの伸縮率を設定します。
Bending Stiffness クロスの曲げ剛性を設定します。
Use Tethers 動いているクロスのパーティクルが固定されたパーティクルから、遠くに離れ過ぎるのを防ぐ制限を適用します。
Use Gravity クロスに重力加速度を適用します。
Damping モーションの減衰係数を設定します。
External Acceleration クロスに外部から一定に加えられる加速度を設定します。
Random Acceleration クロスに外部からランダムに加えられる加速度を設定します。
World Velocity Scale ワールド空間でのキャラクターの動きがクロスの頂点にどのくらい影響を与えるかを設定します。
World Acceleration Scale ワールド空間でのキャラクターの加速がクロスの頂点にどのくらい影響を与えるかを設定します。
Friction キャラクターと衝突したときのクロスの摩擦係数を設定します。
Collision Mass Scale 衝突するパーティクルの密度をどのくらい増加するかを設定します。
Use Continuous Collision 衝突の安定性を向上させるために継続的な衝突を有効にします。
Use Virtual Particles 衝突の安定性の向上のために、ひとつの三角形ごとにひとつの仮想パーティクルを加えます。
Solver Frequency 一秒間ごとのソルバー反復の回数を設定します。
Sleep Threshold クロスのスリープのしきい値を設定します。
Capsule Colliders クロスインスタンスが衝突するカプセルコライダーの配列を設定します。
Sphere Colliders クロスインスタンスが衝突するスフィアコライダーの配列を設定します。

プロパティーに関して:Unity マニュアル「Cloth」より引用 
https://docs.unity3d.com/ja/2019.3/Manual/class-Cloth.html

各項目の詳細な設定は衣服などを表現する際に調整します。
今回は基礎的な使い方を学ぶためだけなので、省略します。

PlaneとSphereを衝突させる

今回は基礎的な使い方としてPlaneとSphereを衝突させてみましょう。
Cloth コンポーネントはRigidbodyをアタッチしなくても、Gravity(重力)が発動します。

Use GravityがON

この状態で再生してみましょう。

再生中

この状態で再生しても、PlaneとSphereは衝突せず、通過してしまいます。
Cloth コンポーネントのプロパティを設定して、衝突させます。

Sphere Colliders

Cloth コンポーネントをアタッチした3Dモデルを、ほかの3Dモデルと衝突させる方法の代表的なやりかたは、Cloth コンポーネントの「Sphere Colliders」を使う方法です。その説明をします。

Planeを選択した状態で、インスペクターウィンドウのCloth コンポーネントを確認しましょう。
プロパティの「Sphere Colliders」を設定することで衝突させることができます。

Sphere Colliders

左の▶をクリックし、メニューを表示させます。
メニューを表示すると「Size」と書かれたプロパティが現れます。
このSizeの値はCloth コンポーネントに当たり判定を設定するColliderの数となります。
現在は「0」となっているため、当たり判定を設定するColliderの数が0のため(Sphereを当たり判定と設定していないため)、衝突しません。

このSphere Collidersに、シーン上のSphereを設定します。
Sphere CollidersのSizeの値を1にします。

Sizeを1

すると、新しく「Element 0」というプロパティが表示されます。
First / Secondとありますが、今回はFirstのみを使います。
Firstのプロパティーの「None」の空欄部分に、ヒエラルキーウィンドウ上のSphereをドラッグ&ドロップしましょう。

Sphereを設定

これでシーン上のSphereはPlane(Cloth)の当たり判定に設定されました。
実際に再生してみましょう。

Clothの衝突

実際に衝突して、布のような動きを表現してくれました。
別のSphereを作成して衝突させる場合は、再度同じようにCloth コンポーネントのSphere Collidersの設定をしましょう。

また、プロパティー上の「Capsule Colliders」は同じように、Capsule Colliderを当たり判定に設定することができます。
人などに当たり判定を設定したい場合はCapsule Collidersを使用しましょう。

STYLYへアップロード

この布の表現を応用していろいろな作品制作に使ってみましょう!
布の表現を追求することで、衣服や旗など現実のオブジェクトをシミュレーションすることができます。
今回は基礎的な使い方のみを解説しましたが、別の記事では衣服や旗などを作れるようにします!

最後にSTYLYへアップロードしましょう。今回はプレハブでアップロードします。
プレハブでアップロードする際には、SphereとPlaneを空のGame Objectにし、Game Objectをプレハブ化しアップロードしましょう。

Game Objectでまとめる

STYLYアカウントを作成する

アカウント作成方法 

NEWVIEW SCHOOL ONLINEの紹介

VR/ARコンテンツ制作に必要なUnity・PlayMakerを基礎から応用まで学べ、STYLYで配信されている魅力的なコンテンツの制作過程(制作技術も公開します)を学べるNEWVIEW SCHOOL ONLINEを開講中です。