Capsule Collider
をもつPlayerオブジェクトのFixedUpdate
で地面との衝突判定をするIsGrounded()
を実装した。
private void FixedUpdate()
{
Move();
if(IsGrounded())
{
jumping = false;
}
}
private bool IsGrounded(float length = 0.1f)
{
Vector3 raycastOrigin = transform.position;
raycastOrigin.y += .05f;
if(Physics.Raycast(raycastOrigin, Vector3.down, out RaycastHit hit, length, groundLayer))
{
return true;
}
return false;
}
はじめは、IsGrounded()
の中で、length
の値と、raycastOrigin.y
に加算する値がミスっており上手く衝突判定できなかった。
なので図で描いて整理してみた。
図の補足
- 青矢印はray
- 下の四角がGroundオブジェクト(図のGroudは誤字)
- Playerオブジェクト自体の
transform.position.y
が0になるように、オブジェクトを設定している
NG例とOK例を見比べると、rayの長さは衝突判定対象のColliderの真ん中以上に突っ切らないように調節したほうがよさそうだと思った。