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));