相对于相机旋转滚动球体

时间:2015-03-31 12:33:35

标签: c# unity3d oculus

我正在研究Oculus Rift的新控制方案,该方案利用耳机的倾斜来移动播放器。意思是,你来回前后倾斜前进和后退,并从一侧到另一侧进行扫射。相机被绑在一个滚动的球体上,因为它给人一种很好的加速感,感觉有点像飞来飞去。到目前为止,它运作良好,但仅限于全局轴。因此,如果向左转并向前倾斜头部,您仍然可以根据起始位置前进(如果您面向左侧意味着您将向右移动)。我正在尝试修复它,这样你就可以相对于相机朝向的方向向前走,但没有运气。我有一种强烈的感觉,这是一种非常简单的东西,但我似乎无法找到它。非常感谢任何帮助!

以下是我现在在滚动球体上的内容:

public GameObject RightCamera;


void FixedUpdate(){
    float angleX = RightCamera.transform.eulerAngles.x;
    angleX = (angleX > 180) ? angleX - 360 : angleX;

    float angleZ = RightCamera.transform.eulerAngles.z;
    angleZ = (angleZ > 180) ? angleZ - 360 : angleZ;

    Vector3 movement = new Vector3 (-angleZ, 0, angleX);

    GetComponent<Rigidbody>().AddForce (movement);

}

2 个答案:

答案 0 :(得分:0)

终于解决了!我用了

    GetComponent<Rigidbody> ().AddForce (RightCamera.transform.forward * angleX);
    GetComponent<Rigidbody> ().AddForce (-RightCamera.transform.right * angleZ);

现在球体相对于相机滚动。

答案 1 :(得分:0)

这是一种简单的方法。给定以四元数(或3×3矩阵)表示的方向,将其与单位Y轴向量组合。

得到的vec3的X和Z值是你的力量。无需涉及欧拉角,当你接近垂直方向成90度角时,这几乎肯定会开始伤害你。