C# 统一:在不改变y位置的情况下,基于向前水平方向移动相机

C# 统一:在不改变y位置的情况下,基于向前水平方向移动相机,c#,unity3d,unity5,virtual-reality,C#,Unity3d,Unity5,Virtual Reality,我正在Unity中创建一个谷歌纸板VR应用程序。我希望相机在面对的方向上不断水平向前移动,但不改变其Y位置,即不上升或下降 我已经成功地获得了它,这样相机就可以朝着它所看到的任何方向向前移动,但如果你朝着这个方向看,它可以上下移动,使用以下代码行: transform.position = transform.position + cam.transform.forward * WalkingSpeed * Time.deltaTime; 有没有一种简单的方法来固定Y轴,这样我就能得到我想要的

我正在Unity中创建一个谷歌纸板VR应用程序。我希望相机在面对的方向上不断水平向前移动,但不改变其Y位置,即不上升或下降

我已经成功地获得了它,这样相机就可以朝着它所看到的任何方向向前移动,但如果你朝着这个方向看,它可以上下移动,使用以下代码行:

transform.position = transform.position + cam.transform.forward * WalkingSpeed * Time.deltaTime;
有没有一种简单的方法来固定Y轴,这样我就能得到我想要的行为?以下是到目前为止的完整代码:

using UnityEngine;
using System.Collections;

public class CameraMovement : MonoBehaviour {

    public float WalkingSpeed = 1.0f;
    public bool WalkEnabled = true;

    GameObject cam;

    void Start () {
        // This is the part of the Cardboard camera where I'm getting
        // the forward position from:
        cam = GameObject.FindWithTag("CCHead");
    }

    void Update () 
    {
        if (WalkEnabled) 
        {
            walk();
        }
    }

    void walk()
    {
        transform.localPosition = transform.localPosition + cam.transform.forward * WalkingSpeed * Time.deltaTime;
    }
}
注意:勾选刚体约束中的“冻结位置”y值无效


非常感谢。

您可以尝试将前向向量拆分,并在y轴不变的情况下构建一个新的前向向量:

 transform.position =  
 transform.position + 
 new Vector3(
      cam.transform.forward.x * WalkingSpeed * Time.deltaTime,
      0, // add 0 to keep the y coordinate the same
      cam.transform.forward.z * WalkingSpeed * Time.deltaTime);

谢谢你,尽管出于某种原因,这会导致我的相机从场景中消失。我试图找出原因,但同时我认为我已经通过编写
float ypos=transform.position.y;transform.position=transform.position+cam.transform.forward*行走速度*Time.deltaTime;Vector3 resetY=变换位置;resetY.y=ypos;transform.position=resetY-虽然这不完全是干净的代码,但我发现了我犯的另一个错误。。。
vector3
的Y坐标必须为0,因为您要将其添加到当前位置。这在每一帧中都造成了指数级的Y移动。啊哈,没错!那很好用。如果你能编辑你的答案,我很乐意接受!非常感谢您的帮助@Nefrin