Как и в самом начале сцены, отладка показывает, что игрок НЕ заземлен, и моя анимация отражает это, потому что воспроизводится анимация падения. Добавление isGrounded = true; to Start() работает, но это не кажется хорошим решением. Я просто пытаюсь заставить игрока прилипать к каждой поверхности, по которой он движется, но при этом иметь возможность нормально прыгать. При спуске по лестнице мой игрок взлетает в воздух, а затем падает.
Я также не знаю, как Raycast или SphereCast будут работать на разных поверхностях, таких как пересеченная местность, закругленные объекты и т. д. , или внизу лестницы/склона и т. д., где Raycast больше не будет работать. Но замена его на SphereCast заставляет его работать на краях объектов, чего не должно быть. До сих пор использование слоев было непоследовательным, если только я не добавлял невидимые коллайдеры к каждому отдельному объекту с определенным слоем, чтобы предотвратить такие крайние случаи, но я тоже не знаю, разумно ли это.
Я не могу найти никакой актуальной и полезной информации или ресурсов/руководств. Нет ли чего-нибудь более подходящего для понимания того, как с этим справиться?
Код: Выделить всё
if (Physics.Raycast(transform.position, -transform.up, out RaycastHit hit, 1.3f))
{
float angle = Vector3.Angle(Vector3.up, hit.normal);
if (angle > 0.1f)
{
hitNormal = hit.normal;
velocity.y = -15f; // Make the player snap to/stay on the ground
}
else
{
hitNormal = Vector3.up;
}
}
else
{
hitNormal = Vector3.up;
}
if (!isGrounded)
{
Debug.Log(isGrounded);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... the-ground