Unity3D将立方体放置在前端VR播放器中,并随播放器位置和旋转而移动

问题描述

我正在使用Oculus Quest开发一个VR场景。我需要在用户的视线下方放置一个立方体,并在其下方放置几个单位。用户移动时,多维数据集必须移动。例如。如果用户转动或移动多维数据集,则用户始终保持在前面以确保其位置。我该怎么办?

我应该将OVRCameraRig的位置和旋转应用于立方体吗?但是我从StackOverflow问题Unity3D Getting position of OVRCameraRig中获悉,OVRCameraRig不会移动,需要考虑CenterEyeAnchor的详细信息。

我可以如下提取CenterEyeAnchor旋转和位置吗?

OVRCameraRig overCameraRig;

var position = overCameraRig.centerEyeAnchor.position;
var rotation = overCameraRig.centerEyeAnchor.rotation;

//OR should I use lines below?

var position = overCameraRig.centerEyeAnchor.transform.position;
var rotation = overCameraRig.centerEyeAnchor.transform.rotation;

如果要解决此问题,如何将提取的部分和CenterEyeAnchor的旋转应用于多维数据集gameObject?

我尝试了以下脚本并将其添加到多维数据集中,但是该多维数据集并未随用户移动而移动。

此外,我看到“测试位置”日志,但没有“正常”或“变换”日志。

public class MoveCube : MonoBehavIoUr
{
private OVRCameraRig overCameraRig;
public float offset = 10;
private GameObject itemObject;
private float distance = 3.0f;

// Update is called once per frame
void Update()
{
    Debug.Log("Test position");
    Debug.Log("normal " +overCameraRig.centerEyeAnchor.position);
    Debug.Log("Transform " + overCameraRig.centerEyeAnchor.transform.position);

    if (itemObject != null)
    {
        itemObject.transform.position = overCameraRig.centerEyeAnchor.transform.position + overCameraRig.centerEyeAnchor.transform.forward * distance;
        itemObject.transform.rotation = new Quaternion(0.0f,overCameraRig.centerEyeAnchor.transform.rotation.y,0.0f,overCameraRig.centerEyeAnchor.transform.rotation.w);
    }
   
}

}

解决方法

最好的做法是将多维数据集设置为层次结构中播放器的子级。

Like this

这不会随播放器一起旋转,但是我怀疑您的相机在播放器上,所以可以这样做:

This will rotate with the camera

但是它将在所有轴上旋转。您还可以使用刚体冻结旋转冻结其旋转。