Unity:在不改变y位置的情况下,根据前向水平方向移动摄像机

时间:2016-03-12 15:26:07

标签: c# unity3d unity5 virtual-reality

我在Unity中创建了Google Cardboard 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值不起作用。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

您可以尝试向前分割前向向量并构建一个y轴不会改变的新向量:

struct aux_base {
  // also provide access to stored function
  virtual size_t my_size(void) const = 0;
  virtual aux_base * copy_in(void * memory) const = 0;
  virtual void free(void * ptr) = 0;
  virtual ~aux_base() {}
};

template<class Alloc, class Function>
struct aux : public aux_base {
  // Store allocator and function here

  size_t my_size(void) const {
    return sizeof(*this);
  }
  aux_base * copy_in(void * memory) const {
    // attention for alignment issues!
    return new (memory) aux(*this);
  }
  void free(void * ptr) {
    aux * stored = reinterpret_cast<aux *>(ptr);
    // do your stuff
  }
};

void deleter_for_aux(aux_base * ptr) {
  char memory[ptr->my_size()];
  aux_base * copy = ptr->copy_in(memory);
  copy->free(ptr);
  copy->~aux_base(); // call destructor
}