Заставить контроллер персонажа прилипать к земле?C#

Место общения программистов C#
Ответить
Anonymous
 Заставить контроллер персонажа прилипать к земле?

Сообщение Anonymous »

Я заставил это работать, но на самом деле просто использовал Raycast и проверил угол, а затем нажал игрока вниз с помощью вертикальной скорости. Но тогда это не позволяет игроку прыгать при движении вверх или вниз по лестнице, и даже несмотря на то, что я добавил для этого предложение с if (!Input("Jump)") и groundedTimer, равным 0,3f секунды, движение все равно остается нестабильным.< /p>
Как и в самом начале сцены, отладка показывает, что игрок НЕ заземлен, и моя анимация отражает это, потому что воспроизводится анимация падения. Добавление 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);
}
Изменить: кажется, я исправил проблему с прыжками, но при прыжке вверх по лестнице длина прыжка значительно сокращается, что, я думаю, происходит, поскольку вы прыгаете в гору. Но внизу лестницы/наклона/любой наклонной поверхности Raycast перестает бить, поэтому значение isGrounded становится ложным, и игрок неоднократно отскакивает.

Подробнее здесь: https://stackoverflow.com/questions/791 ... the-ground
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»