Unity Player向世界的向前移动不是本地的

时间:2018-11-27 13:54:33

标签: c# unity3d

我目前在Player Gameobject上有一个脚本。我进行了设置,以便在我使用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”的代码,以便玩家的腿始终可以“ Forward”移动?

1 个答案:

答案 0 :(得分:0)

没关系,我想通了

我使用下面的代码,这利用了世界空间方向

PlayerRightLeg.transform.rotation = Quaternion.AngleAxis(PlayerRightLeg.transform.rotation.x - (60  * WalkingTime), transform.TransformVector(1,0,0));