gamebox

unityとかゲームとか

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

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

Unity 2018.1.02f 使用

 

f:id:rgamebox:20180530183923g:plain

 

 

布モデル作成

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

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

f:id:rgamebox:20180530184050p:plain

 

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

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

f:id:rgamebox:20180530184200p:plain

f:id:rgamebox:20180530184219p:plain

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

f:id:rgamebox:20180530184233p:plain


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

f:id:rgamebox:20180530184248p:plain

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

f:id:rgamebox:20180530184312p:plain

 

Clothコンポーネントの設定

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

f:id:rgamebox:20180530184323p:plain

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

 

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

f:id:rgamebox:20180530184353p:plain

[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]ウィンドウを開きます

f:id:rgamebox:20180530184429p:plain

 

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

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

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

f:id:rgamebox:20180530184450p:plain

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

f:id:rgamebox:20180530184553p:plain


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

 

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

布っぽくなってきました

f:id:rgamebox:20180530184611g:plain

 

布同士の衝突


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

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

f:id:rgamebox:20180530184657p:plain

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

f:id:rgamebox:20180530184712p:plain

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

f:id:rgamebox:20180530184728p:plain

 

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

f:id:rgamebox:20180530184741p:plain

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

f:id:rgamebox:20180530184804g:plain

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

 

別オブジェクトとの衝突

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

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

 

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

f:id:rgamebox:20180530184921p:plain

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

f:id:rgamebox:20180530184959p:plain

 

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

f:id:rgamebox:20180530185013p:plain

 

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

f:id:rgamebox:20180530185043p:plain

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

 

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

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

f:id:rgamebox:20180530185159p:plain

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

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

f:id:rgamebox:20180530185256p:plain

 

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


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

f:id:rgamebox:20180530185314p:plain

 

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

f:id:rgamebox:20180530183923g:plain