Unity C # - перемещать персонажа во время прыжка - PullRequest
0 голосов
/ 20 мая 2019

Мой персонаж отлично двигается и отлично прыгает.Но когда он прыгает, он просто движется прямо в направлении, откуда он пришел, и вы не можете вращать или перемещать его, находясь в воздухе.Как это можно сделать?

Из функции обновления:

if (controller.isGrounded)
{
    moveD = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
    moveD = transform.TransformDirection(moveD.normalized) * speed;
    moveDA = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));

    if (moveDA.magnitude > 0)
    {                 
        gameObject.transform.GetChild(0).LookAt(gameObject.transform.position + moveDA, Vector3.up);
    }

    if (Input.GetButton("Jump"))
    {
        moveD.y = jumpSpeed;
    }
}

moveD.y = moveD.y - (gravity * Time.deltaTime);
controller.Move(moveD * Time.deltaTime);

1 Ответ

1 голос
/ 20 мая 2019

controller.isGrounded Истинно только в том случае, если в последний раз, когда вы вызывали controller.Move(), нижняя часть коллайдера объекта касалась поверхности, поэтому в вашем случае, когда вы прыгаете, вы не можете двигаться, пока не столкнетесь с землей снова.

Вы можете решить эту проблему, разделив код движения и код перехода следующим образом:

moveD = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
moveD = transform.TransformDirection(moveD.normalized) * speed;
moveDA = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));

if (moveDA.magnitude > 0) 
{ 
  gameObject.transform.GetChild(0).LookAt(gameObject.transform.position + moveDA, Vector3.up);
}

if (controller.isGrounded)
{
  if (Input.GetButton("Jump"))
  {
    moveD.y = jumpSpeed;
  }
}
moveD.y = moveD.y - (gravity * Time.deltaTime);
controller.Move(moveD * Time.deltaTime);
...