Unity Logi c Ошибка с вращением моей машины - PullRequest
0 голосов
/ 19 июня 2020

Мой код, который был помещен в раздел FixedUpdate для поворота машины в моей игре, работает только при движении вперед, почему это

 moveDivisor =(Mathf.Pow(movespeed, (float)1 / 3));
        if (movespeed > 0.1f || movespeed < -0.1f)
        {
            Vector3 rot = new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y + 1 * turnspeed * movespeed / moveDivisor, transform.rotation.eulerAngles.z);
            Vector3 rot2 = new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y - 1 * turnspeed * movespeed / moveDivisor, transform.rotation.eulerAngles.z);
            if (Input.GetKey(KeyCode.D) && movespeed > 0)
            {
                transform.rotation = Quaternion.Euler(rot);
            }
            if (Input.GetKey(KeyCode.A) && movespeed > 0)
            {
                transform.rotation = Quaternion.Euler(rot2);
            }
            movespeed = movespeed / 1.05f;
        }

1 Ответ

1 голос
/ 19 июня 2020

Вероятно, потому что вы дважды проверяете

 if( ... && movespeed > 0)

Для ключа A вы, вероятно, хотели

if(Input.GetKey(KeyCode.A) && movespeed < 0)

Так как в любом случае только одно условие может быть истинным за раз. сделает это if-else if, чтобы избежать лишних проверок. Также сначала проверьте значение movespeed - он дешевле, чем Input.GetKey

if (movespeed > 0 && Input.GetKey(KeyCode.D))
{
    transform.rotation = Quaternion.Euler(rot);
}
else if (movespeed < 0 && Input.GetKey(KeyCode.A))
{
    transform.rotation = Quaternion.Euler(rot2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...