#c# #unity3d
#c# #unity3d
Вопрос:
по сути, я пытаюсь переместить символ так, чтобы, когда я нажимаю W, он двигался вперед, но когда я отпускаю его, он не останавливается (только время от времени). У меня недействительное обновление, а не исправленное обновление.
private void Update()
{
if (controller.isGrounded)
{
if(Input.GetKey(KeyCode.W))
{
anim.SetInteger("condition", 1);
moveDir = new Vector3(0, 0, 1);
moveDir *= speed;
moveDir = transform.TransformDirection(moveDir);
}
if(Input.GetKeyUp (KeyCode.W))
{
anim.SetInteger("condition", 0);
moveDir = new Vector3(0, 0, 0);
}
}
rot = Input.GetAxis("Horizontal") * rotSpeed * Time.deltaTime;
transform.eulerAngles = new Vector3(0, rot, 0);
moveDir.y -= gravity * Time.deltaTime;
controller.Move (moveDir * Time.deltaTime);
}
}
Комментарии:
1. Возможно, из-за вашей проверки на
controller.isGrounded
. Когда выGetKey
(что должно бытьGetKeyDown
, поскольку вы используете Up), вы меняете свою позицию y, и поэтому, когда Update( ) возвращается, вы больше не заземлены. Попробуйте это, также заменитеGetKey
наGetKeyUp
Ответ №1:
Попробуйте посмотреть на свой аниматор и убедитесь, что флажок Применить корневое движение отключен. Аниматор в инспекторе
Что делает root motion, так это то, что он перемещает вашего персонажа через анимацию, а не через код. Вот подробное объяснение корневого движения. Что такое root motion и как это работает
Я думаю, что мне удалось воссоздать вашу проблему, и я получал те же результаты. После того, как я снял флажок Применить корневое движение, мой персонаж остановился, как только я отпустил «W».