Использование Addforce с изменением поворота? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть объект, который я хочу двигаться вперед, не используя W (например, здесь, в этом видео ), и, как и видео, я использую AddForce для этого:

public float forwardForce = 200f;

private void FixedUpdate()
{
     rb.AddForce(forwardForce * Time.deltaTime, 0, 0);
}

Но я хочу, чтобы объект поворачивался влево на 90 градусов каждый раз, когда я нажимаю «A» / «Влево» (и наоборот / также вправо), а также чтобы эта сила толкала его так, как он сейчас повернут,

Я новичок в кодировании, поэтому, пожалуйста, любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 октября 2018

Прежде всего, использование Time.deltaTime в FixedUpdate дает неожиданные результаты.Используйте Time.fixedDeltaTime вместо него.Затем этот код будет делать то, что вы хотите.

private void Update()
{
    if(Input.GetKeyDown(KeyCode.A)
    {
        transform.Rotate(new Vector3(0, 0, 90), Space.Self);
    }
    else if(Input.GetKeyDown(KeyCode.D)
    {
        transform.Rotate(new Vector3(0, 0, -90), Space.Self);
    }
}

private void FixedUpdate()
{
     rb.AddForce(transform.forward * forwardForce * Time.fixedDeltaTime);
}

, но если вы используете перемещение вашего объекта этим методом, при повороте он также продолжит перемещать предыдущую позицию.Может быть, вы можете исправить это следующим образом.

private void Update()
{
    if(Input.GetKeyDown(KeyCode.A)
    {
        transform.Rotate(new Vector3(0, 0, 90), Space.Self);
        rb.velocity = rb.velocity.magnitude*transform.forward;
    }
    else if(Input.GetKeyDown(KeyCode.D)
    {
        transform.Rotate(new Vector3(0, 0, -90), Space.Self);
        rb.velocity = rb.velocity.magnitude*transform.forward;
    }
}

private void FixedUpdate()
{
     rb.AddForce(transform.forward * forwardForce * Time.fixedDeltaTime);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...