在Unity中预防Y轴运动`transform.forward`

时间:2016-11-04 22:28:07

标签: c# unity3d 3d unity5 yaxis

我在Unity中创建一个3D游戏,我有一个脚本让玩家用鼠标环顾四周。为了让玩家朝着他们正在寻找的方向移动,我正在使用transform.forward。我的问题是,当他们看着天花板并按下' W' (向前),他们开始上升到空中。基本上我需要知道是否有transform.forward的方法或子方法只允许在x和z轴上移动。

这是我的动作脚本(C#):

if (transform.rotation.x < -10)
        {
            //do no forward or backward movement
            Debug.Log("Rotation too great to forward move...");
            tooGoodForMovement = true;

        }
        else
        {
            tooGoodForMovement = false;
            if (Input.GetKey(KeyCode.W))
            {
                //Forward
                player.velocity = (transform.FindChild("Main Camera").transform.forward * moveSpeed);
            }
            if (Input.GetKey(KeyCode.S))
            {
                //Back
                player.velocity = (-transform.FindChild("Main Camera").transform.forward * moveSpeed);
            }
        }
        if (Input.GetKey(KeyCode.A))
        {
            //Left
            player.velocity = -transform.FindChild("Main Camera").transform.right * moveSpeed;
        }

        if (Input.GetKey(KeyCode.D))
        {
            //Right
            player.velocity = transform.FindChild("Main Camera").transform.right * moveSpeed;
        }

1 个答案:

答案 0 :(得分:2)

尝试将速度矢量设置为临时变量并将Y重置为零。

DataFrame

然后在你的其他功能中:

Transform camera;

void Start()
{
    //Cache transform.FindChild so that we don't have to do it every time
    camera = transform.FindChild("Main Camera");
}