Cloth コンポーネントはスキンメッシュレンダラーと連動して機能し、物理演算を用いたクロス (布) のシミュレーションを行います。これはスキンメッシュと一緒に使う必要があり、キャラクターの衣服によく使われます。Cloth コンポーネントをスキンメッシュがないゲームオブジェクトに加えると、Unity は自動的にスキンメッシュ以外のメッシュを削除し、スキンメッシュを加えます。
Cloth コンポーネントをスキンメッシュに加えるには、エディターでゲームオブジェクトを選択し、インスペクターウィンドウで Add Component ボタンを押し、 Physics > 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 | 1 秒間ごとのソルバー反復の回数を設定します。 |
Sleep Threshold | クロスのスリープのしきい値を設定します。 |
Capsule Colliders | クロスインスタンスが衝突するカプセルコライダーの配列を設定します。 |
Sphere Colliders | クロスインスタンスが衝突するスフィアコライダーの配列を設定します。 |
Cloth コンポーネントはシーン内のすべてのコライダーに反応するわけではなく、ゲームオブジェクトへ力を跳ね返すわけでもありません。Cloth コンポーネントは加えられても、その他のリジッドボディに対してまったく反応せず、影響も与えません。したがって、手動でゲームオブジェクトの Cloth コンポーネントへ世界からのコライダーを加えるまでは、互いに影響することはありません。また追加後も、シミュレーションは一方的なものになります。つまり、リジッドボディに対してクロスは反応しますが、クロスが影響を与えることはありません。
また、Cloth に使用できるコライダーは 3 種類のみです。スフィア、カプセル、2 つのスフィアコライダーで構成される円錐形カプセルコライダーです。こういった制限はすべて、パフォーマンス強化のために設けられています。
Edit > Constraints の順に選択すると、クロスメッシュ内の各頂点に適用する制限を編集するためのモードに切り替わります。すべての頂点は、それぞれの値の違いを表示するために、その時点の Visualization モードを基に色付けされます。ブラシを使ってクロスにペイントして Cloth の制限を編集できます。
プロパティー | 機能 |
---|---|
Visualization | Max Distance と Surface Penetration を切り替えると、シーンビューのツールの表示が変わります。Manipulate Backfaces への切り替えも可能です。 |
Max Distance | クロスのパーティクルが、頂点の位置から移動できる最長距離を設定します。 |
Surface Penetration | クロスのパーティクルがメッシュに食い込む深さを設定します。 |
Brush Radius | クロスに制限をペイントするためのブラシの半径を設定します。 |
各頂点の値を変更するために使用できるモードは 2 つあります。
Select モードを使うと、 頂点をまとめて選択できます。これを行うには範囲指定するか、個々の頂点をひとつずつクリックして選択します。それから、 Max Distance、Surface Penetration、またはその両方にチェックを入れて、値を設定します。
Paint モードを使うと、 個々の頂点を直接調整できます。これを行うには、調整したい頂点をクリックします。それから、 Max Distance、Surface Penetration、またはその両方にチェックを入れて、値を設定します。
両モードで、Max Distance と Surface Penetration に値を割り当てると、シーンビューの表示が自動的に更新されます。
クロスの衝突は、ゲーム内のキャラクターの衣服やさまざまな布をよりリアリスティックに動かします。Unity では、クロスは衝突を処理するいくつかのクロスのパーティクルを持ちます。以下のものに対してクロスのパーティクルを設定できます。
クロスに衝突パーティクルを設定するには、Cloth のインスペクターで Self Collision And Inter Collision ボタンを押します。
シーンビューに表示された Cloth Self Collision And Intercollision ウィンドウ
Cloth コンポーネントでスキンメッシュに自動的に表れるクロスのパーティクル。最初は、クロスのパーティクルにはコリジョンの設定がされてません。これらの使用されていないパーティクルは黒く表示されます。
セルフコリジョンやインターコリジョンを適用するには、衝突を適用する一群のパーティクルを Select ボタンから選ぶ必要があります。
衝突を適用するパーティクルを選ぶには、左クリックしてドラッグします。
選択したパーティクルは青で表示されます。
Self Collision and Intercollision にチェックを入れ、選択したパーティクルに衝突を適用します。
衝突に使用することを指定したパーティクルは緑で表示されます。
クロスのセルフコリジョンの挙動を有効にするには、Cloth インスペクターウィンドウの Self Collision セクションに移動し、Distance と Stiffness をゼロ以外の値にします。
プロパティー | 機能 |
---|---|
Distance | 各パーティクルの周りのスフィアの直径。Unity は、シミュレーション中にこれらのスフィアが重なり合わないようにします。 Distance は、2 つのパーティクル間の最短距離よりも小さく設定する必要があります。距離が大きい場合、セルフコリジョンが距離の制約に反してジッタが発生する場合があります。 |
Stiffness | パーティクル間の分離の力の強さ。クロスソルバーはこれを計算し、パーティクルを分離した状態に保つようにします。 |
セルフコリジョンとインターコリジョンは、シミュレーション時間全体のかなりの部分を占める可能性があります。衝突距離を小さく保ち、セルフコリジョンインデックスを使用して、互いに衝突するパーティクルの数を減らすことを検討してください。
セルフコリジョンでは三角形ではなく頂点が使用されるので、クロスの厚さよりもかなり大きい三角形をもつメッシュに対してセルフコリジョンが完全に機能するわけではありません。
Paint と Erase モードでは、左マウスボタンを押したまま個々のクロスのパーティクルをドラッグすることで、衝突時に使用するパーティクルを加えたり、削除したりします。
Paint または Erase モードの場合、衝突に指定されたパーティクルは緑、指定されないパーティクルは黒、ブラシの下にあるパーティクルは青です。
上で説明したセルフコリジョンのためのパーティクルを指定するのと同じ方法で、インターコリジョンのためのパーティクルを指定します。セルフコリジョンと同様に、インターコリジョンのために 1 組のパーティクルを指定します。
インターコリジョンの動作を有効にするには、PhysicsManager インスペクター (Edit > Project Settings > Physics) を開き、 Cloth InterCollision セクションで Distance と Stiffness をゼロ以外の値に設定します。
Cloth intercollision の Distance と Stiffness プロパティーは、上の Self collision の Distance と Stiffness プロパティーと同じ機能を持っています。
クロスは、ゲーム世界の任意のジオメトリと単純に衝突することはできず、Capsule Colliders か Sphere Colliders 配列で指定されたコライダーとだけ相互作用します。
SphereCollider の配列は、有効な単一の SphereCollider インスタンス (2 つ目は null) か、ペアを 1 組含むことができます。前者の場合、ClothSphereColliderPair はクロスが衝突する単一のスフィアコライダーを表します。後者の場合は、円錐カプセル形で、2 つのスフィアによって定義された 1 つの円錐形を表し、円錐は 2 つを繋げます。円錐カプセル形は、キャラクターの手足をモデリングする場合に便利です。