对象层次结构是如此:
Player
- OVRCameraRig
- TrackingSpace
- CentralEyeAnchor (Camera)
默认情况下,播放器最初会朝向正确的区域,但是由于在VR中这可能会使某人校准或“居家”播放器,因此相机可以面对场景而无需在现实生活中面对该方向。这是使用Oculus Quest进行的,因此我基本上希望改变播放器的旋转偏移量,以便相机观察场景。
脚本已附加到Player,vrCamera作为CentralEyeAnchor:
Quaternion quat = Quaternion.Inverse(rotationOffset) * vrCamera.transform.rotation;
Vector3 euler = quat.eulerAngles;
euler.x = 0;
euler.z = 0;
transform.rotation = Quaternion.Euler(euler);
rotationOffset = transform.rotation;
首先,找到相机和播放器之间的相对旋转relativeRot
,即playerRotation == cameraRotation * relativeRot
。
通过将左侧的两边乘以Inverse(cameraRotation)
,我们知道然后是Inverse(cameraRotation) * playerRotation == relativeRot
: