【问题标题】:Lock camera position in VR在 VR 中锁定相机位置
【发布时间】:2016-09-21 13:11:18
【问题描述】:

我正在玩一些虚拟现实,到目前为止我可以移动一个角色等等。然而,相机的位置正在改变。我希望我的相机处于固定位置,并且只能通过 HMD 改变上/下位置和正常旋转。

void Start ()
{
    startPos = transform.localPosition;
    parentObj = transform.root;
}

void Update()
{
    ResetVR();
}

void ResetVR()
{
    if (parentObj != null)
    {
        startPos -= InputTracking.GetLocalPosition(VRNode.CenterEye);       
        transform.localRotation = Quaternion.Inverse(parentObj.localRotation);
    }
}

这样,我的角色可以正常旋转,但相机不会停留在固定位置。

例如,如果我旋转 90 度,相机最终会在角色的左侧。我希望相机保持在固定位置。

【问题讨论】:

    标签: c# unity3d virtual-reality


    【解决方案1】:

    您只想上/下。这与仅围绕 x 轴旋转相同。获取原始位置。将Quaternion 转换为角度,然后用transform.localEulerAngles 而不是transform.localRotation 旋转。在旋转之前用originalPos 变量覆盖另外两个轴(y,z)。您可能需要对其进行修改以使其正常工作。

    Transform parentObj;
    Vector3 startPos;
    Vector3 originalPos;
    
    void Start()
    {
        startPos = transform.localPosition;
        originalPos = transform.localPosition;
        parentObj = transform.root;
    }
    
    void Update()
    {
        ResetVR();
    }
    
    void ResetVR()
    {
        if (parentObj != null)
        {
            startPos -= InputTracking.GetLocalPosition(VRNode.CenterEye);
    
            Quaternion tempRot = Quaternion.Inverse(parentObj.localRotation);
            Vector3 newAngle = tempRot.eulerAngles;
            transform.localEulerAngles = new Vector3(newAngle.x, originalPos.y, originalPos.z);
        }
    }
    

    【讨论】:

    • 它以 50/50 的速度工作,但是如果我将头转 90 度,现在的旋转角度会增加 90 度。我所拥有的代码正在修复这个问题。
    • 50/50 是什么意思?它再旋转 90 度的角度是多少?
    • 相机的位置很好,但旋转不好。该组件的值表明它是正确的。戴上 VR 眼镜后,它会多转 90 度。
    • 好的。那么哪个轴?当您说多 90 度时……您是指在左侧、右侧向上还是向下?
    • 啊对不起,左右。当我向左或向右看时,我会用相机在我身后观看。所以 X 轴。
    【解决方案2】:

    您可能想看看this rule

    请参阅Unity's documentation 了解此内容。

    【讨论】:

    • 我知道,我稍微改变了我的问题。我只不想要 VR 的精益动作。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2021-03-19
    • 2019-05-29
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    相关资源
    最近更新 更多