Categories: unity:総合

【unity】布の動き:クロスシミュレーション

2019/01/19更新

unity 2019現在、標準clothはバグっているのでこちらのアセットを使うのが吉

www.unitygamebox.com

 

 

みんな大好き布の動き。
今回はクロスシミュレーションCross simulationの使い方を書きます。

Unity 2018.1.02f 使用

 

 

 

布モデル作成

まず布のモデルを作成します。

メニュー > 3D Object > Plane
Positionを全て0にしましょう

 

通常ではメッシュの裏面は表示されないので、スタンダードアセットのトゥーンを適用します。そうすると裏面も表示されます。

メニュー > Assets > Import Package > Effectsを選択し、Importを行います。

PlaneのMaterialsにToonBasicを設定します。

マテリアルのMain Colorを設定しピンクっぽい色にします

これでメッシュの裏側も表示されるようになりました。

 

Clothコンポーネントの設定

Clothコンポーネントを設定します
Planeを選択肢、インスペクタ下部の[Add Component]から[Physics]>[Cloth]を選択します

Skinned Mesh RendererとClothが追加されます

 

◆パラメーターを設定します。

[Stretching Stiffness]布の伸び具合 0~1で設定。
“1”で伸びにくくなる。0.8設定

[Bending Stiffness]布のねじれ具合 0~1で設定。
“1”でねじれにくくなります。 0.2設定

[Damping]布の動きの減衰 0~1で設定。
“1”は最も減衰力が働きます。 0.05に設定

[Friction]は衝突物との摩擦。0~1で設定
0.5のままです

[Solver Frequency]はシミュレーションの精度。数値が大きいほど精度が高くなります。
ここでは120のまま

このままでは重力で落ちてしまうので次に進みます。

 

◆ジョイントの位置を固定して落下を防ぎます
この画像のボタンを押して[Cloth Constraints]ウィンドウを開きます

 

[Select]をクリックして、固定するジョイントをドラッグで選択します

[Max Distance]にチェックを入れて有効にします

[Max Distance]ではジョイントの初期位置から移動できる最長距離を設定します。0を設定することで一を固定することができます

[Max Distance]が0に設定されるとジョイントが赤色で表示されます。

※それにしてもここまで近づかないとジョイントが判別できません。大きくしてよー>Unityさん

 

この状態で実行してみます

布っぽくなってきました

 

布同士の衝突

◆布同士が貫通しているので、衝突するように[Self-Collision]を設定します。

先程より右側のボタンをクリックして[Cloth Self-Constraint And Inter-Constraint]ウィンドウを開きます

[Select]をクリックして、全てのジョイントを選択します

[Self-Collision and Inter-Collision]にチェックを入れて有効にします

 

・[Self-Collision and Inter-Collision]を有効にすると、ClothパネルにSelf Collisionのプロパティが表示されます

[Self Collision Distance]を0以外に設定するとセルフコリジョンが機能します。
“0.6”に設定して実行してみます

 布が貫通しなくなりました!

 

別オブジェクトとの衝突

◆別オブジェクトを(キャラ)を配置して衝突物として設定します

ヒエラルキーの[Create]から[3D Object] > [Plane]を選択して地面となる板状オブジェクトを作成します

 

布が垂れ下がったときに衝突しないように[Position]のYを”-11″に設定します
大きさ[Scale]のX,Zを10に設定します

スタンダードアセットのキャラクターをSceneに配置します。
Assetsメニューから[Import Package]>[Characters]を選択してインポートします

 

下画像を参考にヒエラルキーにドラッグしてキャラクターを配置します

 

キャラクターの大きさを3にして、Position [Y]”-11″ [Z]”-9″に設定します

※このキャラクターは衝突判定となる[Collider]コンポーネントが既に設定されています

 

布の位置の固定位置を変更します

[Cloth Constraints]ウィンドウを開き、[Select]をクリックし、全てのジョイントを選択します

[Max Distance]のチェックを外し無効にします

改めて端の一辺を選択して[Max Distance]にチェックを入れて有効にします

 

[Cloth]パネルの[Capsule Colliders]プロパティを開きます。

[Size]を1に変更し、[Element 0]にキャラクターをドラッグする事で衝突判定が機能するようになります

 

これでキャラクターと布の衝突判定が完成しました!

 

gamebox

「たのしいさんすう」リリース開始!札幌で働くゲームデザイナーです。プログラマー10年、プランナー10年やっています。メインプランナー4本/ディレクター2本やりました。unityとソシャゲが好き。2児の父親です

Share
Published by
gamebox