我在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值不起作用。
非常感谢提前。
答案 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
}