在VR中锁定相机位置

时间:2016-09-21 13:11:19

标签: c# unity3d virtual-reality

我正在玩VR一点,到目前为止我可以移动一个角色等等。但是相机的位置正在改变。我希望我的相机处于固定位置,只能通过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度,相机会在角色的左侧结束。我希望相机保持固定位置。

2 个答案:

答案 0 :(得分:0)

你只想上/下。这与仅围绕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);
    }
}

答案 1 :(得分:0)

您可能需要查看this rule

请参阅Unity's documentation