【问题标题】:Unity3D Placing a cube in front VR player and move with player position and rotationUnity3D 在前面的 VR 播放器中放置一个立方体,并随着播放器位置和旋转移动
【发布时间】:2020-09-10 14:04:07
【问题描述】:

我正在使用 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 药水和旋转应用到立方体游戏对象?

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

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

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);
    }
   
}

}

【问题讨论】:

  • 你尝试这个时发生了什么?

标签: c# unity3d virtual-reality oculusquest


【解决方案1】:

最好的办法是将立方体设置为层次结构中玩家的子级。

只有不会随着播放器旋转,但我怀疑你的相机在你的播放器上,所以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多