C# 统一:在不改变y位置的情况下,基于向前水平方向移动相机
我正在Unity中创建一个谷歌纸板VR应用程序。我希望相机在面对的方向上不断水平向前移动,但不改变其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轴,这样我就能得到我想要的
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