以下のリンクの壁ずりベクトルの求め方が参考になるかと思います。
その5 反射ベクトルと壁ずりベクトル
以下のソースコードではOnCollisionStay()
を利用して斜面の法線を取得しています。
public class TestMove : MonoBehaviour
{
[SerializeField]
private float m_speed = 1.0f;
[SerializeField]
private Vector3 m_moveDirection = Vector3.right;
void Update()
{
Vector3 move = m_moveDirection * m_speed * Time.deltaTime;
if( Input.GetKey( KeyCode.LeftArrow ) )
{
transform.position -= move;
}
if( Input.GetKey( KeyCode.RightArrow ) )
{
transform.position += move;
}
}
void OnCollisionStay( Collision i_collision )
{
// 地面以外にコリジョンに当たっていない前提。
// 複数のコリジョンに当たった場合は未対応。
var normal = i_collision.contacts[ 0 ].normal;
Vector3 dir = m_moveDirection - Vector3.Dot( m_moveDirection, normal ) * normal;
m_moveDirection = dir.normalized;
}
} // class TestMove
OnCollisionStay()
毎フレームコリジョンのチェックが入るため、決して軽い処理ではありません。
ゲームによっては使えない可能性がありますが、参考程度に見ていただけると恐縮です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。