Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 相对于摄影机旋转滚动球体_C#_Unity3d_Oculus - Fatal编程技术网

C# 相对于摄影机旋转滚动球体

C# 相对于摄影机旋转滚动球体,c#,unity3d,oculus,C#,Unity3d,Oculus,我正在为Oculus Rift开发一种新的控制方案,它利用耳机的倾斜来移动播放器。意思是,你前后倾斜你的头,向前向后,从一边到另一边扫射。相机被固定在一个滚动的球体上,这给了它一种很好的加速感,感觉有点像在四处飞行。到目前为止,它运行得很好,但只是在全球轴上。因此,如果你转向左侧,头向前倾斜,你仍然会根据起始位置向前移动(如果你面向左侧,则意味着你将向右移动)。我正试图修复它,这样你就可以前进并相对于相机所面对的方向扫射,但没有运气。我有一种强烈的感觉,这是一件简单得可笑的事情,但我就是找不到它

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

}
公共游戏对象右摄像头;
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移动=新的Vector3(-angleZ,0,angleX);
GetComponent().AddForce(移动);
}

终于解决了!我曾经

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

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

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


生成的vec3的X和Z值是您的力。不需要涉及欧拉角,这几乎肯定会开始伤害你,因为你的方法从垂直90度角

我猜你只是把这个动作直接应用到某个玩家身上?你需要通过这个方向来调整前向向量,我把它应用到一个滚动的球体上,因为我喜欢它滚动的感觉。这意味着我不能真正使用球体的局部旋转,因为随着球体的移动,它在滚动。是的,我意识到90度角将有效地抵消或开始反转预期的力。但说实话,我一周前才开始使用C#,你的回答超出了我的知识水平。我有一点为Arduino编写代码的经验,但仅此而已。稍后我可能会研究你的一些关键词,但现在我的时间有点紧,需要满足于“足够好”。不过我真的很感谢你抽出时间。谢谢