Я бы вынес инпуты GetKey* наружу ифа.
if (controller.isGrounded)
speed = 6.0F; else speed = 6.0F;
Это условие меня повергло в шок
Это:
if (controller.isGrounded)
speed = speed; else speed = 6.0F;
можно записать как
if (!controller.isGrounded) speed = 6.0F;
ну и
//moveDirection.y -= gravity * Time.deltaTime;
if (!controller.isGrounded) { //Поведение вне земли. ПРОБЛЕМЫ В ДАННОМ МЕСТЕ!!!
moveDirection = new Vector3(Input.GetAxis("Horizontal"), moveDirection.y, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection); //TransformDirection - Преобразуем Локальные координаты в Глобальные
moveDirection *= speed/2;
}
moveDirection.y -= gravity * Time.deltaTime;