質問: 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にしてみたりもしましたが、少し浮いた状態で止まったり、逆にめり込んだりと意図しない動きが発生します。 挙動の原因としては、落ちてきたブロックが着地時に若干めり込む→それを修復しようと下のオブジェクトも上下に動く→それが更に下に伝わる→振動が増幅されて高く積む程跳ね返る、という流れだとは思います。 (実際、速度とスリープ状態を確認すると、上の方にあるオブジェクトは見た目上は止まった後も、微弱に振動を続けていてスリープ状態になりません。負荷的にも一度重なったらスリープ状態に入って欲しいです) スクリプトというよりエンジンの使い方の質問となりますが、解決方法をご存知の方は教えて頂けると助かります。
回答: 出先で未確認なのでイケるか分かりませんが 静止したオブジェクトが二度と物理挙動を示さなくても良いのであれば、rigidbodyをdestroyするのはどうですか? 他に、staticにチェックを入れたrigidbodyが動かなくなるなら、それでもイケルかもしれません。