Unity 5.3.4でゲームアプリを開発しています。
「物理演算(Unity標準の重力)を使って直方体のブロックオブジェクトを上から落とし、積み上げる」という挙動を作っています。
1個目・2個目あたりは問題無いのですが、3個目あたりから着地の瞬間、下にあるオブジェクトもろとも跳ね返る(バウンドする)動きをします。
この跳ね返りをさせないようにしたいです。
■オブジェクトの設定(ブロック・地面共通)
・Unity標準の「Cube」で生成
・Rigidbody:Drag、AngularDrag共に0。UseGravityオン。isKinematicオフ。ConstraintsはPositionYのみオフ、他は全てオン。
・BoxCollider:メッシュ全体を囲むように設定。下記のPhysicMaterialを設定。
・PhysicMaterial:DynamicFrictionとStaticFrictionを1、Bouncinessを0、Combineは両方Multiply。
■スクリプト
・クリックしたら指定の位置(固定)にブロックオブジェクトを生成する。
(後は勝手にブロックが落ちて重なる)
着地の瞬間にisKinematicをオンにしたりConstraintsをFreezeAllにしてみたりもしましたが、少し浮いた状態で止まったり、逆にめり込んだりと意図しない動きが発生します。
挙動の原因としては、落ちてきたブロックが着地時に若干めり込む→それを修復しようと下のオブジェクトも上下に動く→それが更に下に伝わる→振動が増幅されて高く積む程跳ね返る、という流れだとは思います。
(実際、速度とスリープ状態を確認すると、上の方にあるオブジェクトは見た目上は止まった後も、微弱に振動を続けていてスリープ状態になりません。負荷的にも一度重なったらスリープ状態に入って欲しいです)
スクリプトというよりエンジンの使い方の質問となりますが、解決方法をご存知の方は教えて頂けると助かります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/10 07:22