ジャンプし過ぎて地面を貫通とかありがち。
おそらく、
1. 判定を厳しくする
2. 高さy:0以下の時に強制的に加速を0にして座標をy:0に強制的にする。
3. 速度を制限。
4. 下向きのRaycastを当てて、地面だったら止める。
1と2は地面の高さが変わるゲームでは使えない。
4は、Raycast使うので重くなりそう。
なので現実的には3かな?と思った。
最高速度を制限する方法。
URL: http://answers.unity3d.com/questions/265810/limiting-rigidbody-speed.html
// 最大スピード public float maxSpeed = 200.0f; private Rigidbody myRigidbody; void Awake () { // 毎回rigidbodyを使うのは処理が重そうなので変数へキャッシュ myRigidbody = this.rigidbody; } void FixedUpdate () { if (rigidbody.velocity.magnitude > maxSpeed) { myRigidbody.velocity = Vector3.ClampMagnitude (myRigidbody.velocity, SAFETY_MAX_SPEED); } }
これでできるっぽいね。