Как реализовать логику ступенек
Написал данный код для реализации ступенек. Так как у игрока колайдер в виде капсулы, игрок упирается в ступеньку. Как это можно решить не игнорирую коллизию?
public void Stairs()
{
var playerHeight = 1;
_isGroundDetected = Physics.SphereCast(transform.position + _sphereOffset,
_sphereRadius, Vector3.down, out var sphereHit,
_playerHeight + _stepSize + _sphereDistance,
_layerMask, QueryTriggerInteraction.Ignore);
if (!_isGroundDetected)
return;
if (!OnGround)
return;
if (sphereHit.point.y + playerHeight/2 + 0.5f <= transform.position.y) // если уже забрались на ступеньку, то выходим
return;
if (sphereHit.point.y + playerHeight/2 - transform.position.y > 0.5f) // избегание слишком высоких ступенек
return;
var groundDotProductValid = sphereHit.normal.y > 0.75f;
if (groundDotProductValid)
{
_targetHeight = transform.position.y + (_sphereOffset.y - sphereHit.distance);
transform.position = new Vector3(transform.position.x, _targetHeight, transform.position.z);
_rigidBody.velocity = new Vector3(_rigidBody.velocity.x, 0, _rigidBody.velocity.z);
}
}