2015-03-31 26 views
0

我正在制定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); 

} 
+0

我猜你只是将这个动作直接应用于某种玩家?你需要通过这个来调整前向矢量 – Sayse 2015-03-31 12:37:57

+0

我将它应用于滚动球体,因为我喜欢它感觉滚动的方式。这意味着我不能真正使用球体的局部旋转,因为球体一旦旋转就会滚动。 – syverlauritz 2015-03-31 12:52:31

回答

0

有一个简单的方法来做到这一点。给定以四元数(或3x3矩阵)表示的方向用单位Y轴向量组成。

生成的vec3的X和Z值是你的力量。不需要涉及欧拉角,当你的方法与垂直方向成90度角时,这几乎肯定会伤害你。

+0

是的,我意识到90度的角度会有效地消除或开始扭转预期的力量。但要完全诚实,我刚刚开始使用C#一个星期前,你的回复超出了我的知识水平。我有一些编码Arduino的经验,但就是这样。稍后我可能会查看一些关键字,但现在我有时候会陷入困境,需要解决“足够好”的问题。我真的很感激你花时间。谢谢! – syverlauritz 2015-04-01 09:34:59

0

终于解决了!我用

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

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