Вертикальное движение в CharacterController.Move()
Добавлено: 21 мар 2020, 22:02
Привет всем. Проблема с вертикальным движением в CharacterController'e. Персонаж прыгает и приземляется, все хорошо, но когда просто стоишь на земле в Update через раз выводится то true, то false. Т.е. персонаж как бы то на земле, то нет, кто знает почему так?
Думал, что, возможно, я слишком сильно опускаю персонажа вниз, коллайдер CharacterController'a пересекается с полом, а потом CharacterController пытается вытолкнуть перса обратно наверх, что в итоге приводит к микроотрыву от земли, но на сцене положение игрока по оси Y не меняется, всегда одно не длинное число.
При использовании метода SimpleMove такой проблемы нет и когда персонаж стоит на земле всегда isGrounded == true, но я не нашел как там реализовано движение по вертикали.
Думал, что, возможно, я слишком сильно опускаю персонажа вниз, коллайдер CharacterController'a пересекается с полом, а потом CharacterController пытается вытолкнуть перса обратно наверх, что в итоге приводит к микроотрыву от земли, но на сцене положение игрока по оси Y не меняется, всегда одно не длинное число.
При использовании метода SimpleMove такой проблемы нет и когда персонаж стоит на земле всегда isGrounded == true, но я не нашел как там реализовано движение по вертикали.
Синтаксис:
Используется csharp
void MoveCharacter()
{
float vertAx = Input.GetAxis("Vertical");
float vertDir = 0;
if (vertAx != 0)
{
vertDir = movement.y;
movement = tr.forward * speed * Mathf.Sign(vertAx);
movement.y = vertDir;
}
else
{
movement.x = movement.z = 0;
}
if (characterController.isGrounded)
{
movement.y = 0;
if (Input.GetButton("Jump"))
{
movement.y = jumpForce;
}
}
else
{
movement.y -= gravity * Time.deltaTime;
}
characterController.Move(movement * Time.deltaTime);
}
{
float vertAx = Input.GetAxis("Vertical");
float vertDir = 0;
if (vertAx != 0)
{
vertDir = movement.y;
movement = tr.forward * speed * Mathf.Sign(vertAx);
movement.y = vertDir;
}
else
{
movement.x = movement.z = 0;
}
if (characterController.isGrounded)
{
movement.y = 0;
if (Input.GetButton("Jump"))
{
movement.y = jumpForce;
}
}
else
{
movement.y -= gravity * Time.deltaTime;
}
characterController.Move(movement * Time.deltaTime);
}
Синтаксис:
Используется csharp
void Update()
{
MoveCharacter();
RotateCharacter();
Debug.Log(" " + characterController.isGrounded);
}
{
MoveCharacter();
RotateCharacter();
Debug.Log(" " + characterController.isGrounded);
}