Почему мой GetKeyUp не обнаруживается в c #?

#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».