Unity Player продвигает движение в мир не локально

В настоящее время у меня есть сценарий на игровом объекте Player. Я настроил его так, что когда я "двигаю" игрока с помощью клавиш WASD, он должен вращать ноги моего игрока, чтобы имитировать ходьбу (я не знаю, как делать анимацию, так что это единственный способ, который я знаю). Смотрите код ниже:

public float WalkingTime;  //timer for walking animation
public GameObject PlayerLeftLeg;
public GameObject PlayerRightLeg;

Код ниже находится под функцией "Обновление"

if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D))
    {
        //timer
        WalkingTime += Time.deltaTime;

        //right leg stepping forward
        if (WalkingTime > 0 && WalkingTime < .4)
        {
            PlayerRightLeg.transform.rotation = Quaternion.AngleAxis(PlayerRightLeg.transform.rotation.x - (60  * WalkingTime), Vector3.forward);
            PlayerLeftLeg.transform.rotation = Quaternion.AngleAxis(PlayerLeftLeg.transform.rotation.x + (60 * WalkingTime), Vector3.forward);
        }

        //left leg stepping forward
        if (WalkingTime > .4 && WalkingTime < 1.2)
        {
            PlayerRightLeg.transform.rotation = Quaternion.AngleAxis(PlayerRightLeg.transform.rotation.x + (60 * (WalkingTime - .8f)), Vector3.forward);
            PlayerLeftLeg.transform.rotation = Quaternion.AngleAxis(PlayerLeftLeg.transform.rotation.x - (60 * (WalkingTime - .8f)), Vector3.forward);
        }

        //right leg stepping forward
        if (WalkingTime > 1.2 && WalkingTime < 1.59)
        {
            PlayerRightLeg.transform.rotation = Quaternion.AngleAxis(PlayerRightLeg.transform.rotation.x - (60 * (WalkingTime - 1.6f)), Vector3.forward);
            PlayerLeftLeg.transform.rotation = Quaternion.AngleAxis(PlayerLeftLeg.transform.rotation.x + (60 * (WalkingTime - 1.6f)), Vector3.forward);
        }

        //resetting
        if (WalkingTime > 1.6)
        {
            PlayerRightLeg.transform.rotation = Quaternion.AngleAxis(0, Vector3.forward);
            PlayerLeftLeg.transform.rotation = Quaternion.AngleAxis(0, Vector3.forward);
            WalkingTime = 0;
        }
    }
    else
    {
        //if player not walking then reset
        PlayerRightLeg.transform.rotation = Quaternion.AngleAxis(0, Vector3.forward);
        PlayerLeftLeg.transform.rotation = Quaternion.AngleAxis(0, Vector3.forward);
        WalkingTime = 0;
    }

Прямо сейчас код работает нормально, за исключением того, что когда я использую свою мышь, чтобы заставить моего игрока вращаться или смотреть в другом направлении, то же самое делает "Вперед" для "PlayerRightLeg" и "PlayerLeftLeg". Мой игрок все еще идет в правильном направлении, которое я хочу, но движение ног вращается не правильно.

Есть ли код, который я могу использовать, чтобы заменить "Vector3.Forward", чтобы ноги моего игрока всегда двигались вперед?

Благодарю.

------------ОБНОВИТЬ------------

Смотрите ответ ниже, я понял это, но оставлю этот пост здесь, чтобы другие могли его увидеть.

1 ответ

Неважно все, я понял это LOL

Я использовал приведенный ниже код, и он использует направления мирового пространства

PlayerRightLeg.transform.rotation = Quaternion.AngleAxis(PlayerRightLeg.transform.rotation.x - (60  * WalkingTime), transform.TransformVector(1,0,0));
Другие вопросы по тегам