Unity3D:如何获取OVRCameraRig实际位置?挂载物体位置异常求助
Hey, I’ve dealt with this exact problem using OVRCameraRig, so I know where you’re coming from. The key thing to realize is that the root OVRCameraRig transform doesn’t move with your head—it acts as the fixed origin point for the entire tracking system. The actual head position is tracked in one of its child nodes, which is why using the rig’s root position gives you wonky results.
Here’s how to get it working correctly:
1. Grab the Real Head/Camera Position
To get the live position of the headset, you need to access the CenterEyeAnchor child of your OVRCameraRig. This is the equivalent of the main camera in a regular setup, and it updates in real-time with head movement:
// Assign your OVRCameraRig in the Inspector public OVRCameraRig cameraRig; // Get the headset's world position Vector3 currentHeadPosition = cameraRig.CenterEyeAnchor.transform.position; // Get the headset's world rotation (if you need it) Quaternion currentHeadRotation = cameraRig.CenterEyeAnchor.transform.rotation;
2. Keep Your Object Static (With Initial Rig Offset)
If you want your object to stay fixed in world space but start at a position relative to the rig, here’s what to do:
- If you want the object locked to a position relative to the rig’s fixed origin (which never moves), set its position once at startup and leave it alone:
This way, even as your head moves around (viapublic GameObject yourStaticObject; void Start() { // Set object position relative to the rig's fixed origin, then it stays put yourStaticObject.transform.position = cameraRig.transform.position + new Vector3(0, 1.5f, 2f); }CenterEyeAnchor), the object stays locked to that initial world position.
3. Accessing OVRCameraRig’s Special Features (Like Floor Height)
You mentioned needing the rig’s ground height feature—you can get that from the FloorAnchor child node:
// Get the calibrated floor height float floorHeight = cameraRig.FloorAnchor.transform.position.y; // Use it to adjust your object's vertical position if needed yourStaticObject.transform.position = new Vector3(yourStaticObject.transform.position.x, floorHeight + 0.5f, yourStaticObject.transform.position.z);
Quick Mistake to Avoid
Don’t confuse the OVRCameraRig root transform with the head position! The root is your starting tracking origin—it never moves once setup. All head movement is handled in child anchors like CenterEyeAnchor.
内容的提问来源于stack exchange,提问作者garrilla

