Unity Final VR IK(资产)将人锁定在坐姿

时间:2019-07-19 14:11:17

标签: c# unity3d constraints accessibility oculus

目前,我正在为有辅助功能限制的人制作游戏。我遇到了将播放器模型锁定在坐姿的问题。如果用户不在房间中居中,则将播放器模型拉向某个方向。我想将玩家模型锁定在座位上,并且只允许手臂运动和头部旋转,而不能使用HMD在游戏中倾斜或移动。

由于我使用的是最终VR IK资产,因此我尝试使用其演示在VR中的坐姿,无法让玩家自然坐下。我不确定如何对此进行编程或设置限制以能够执行此操作。

编辑:为简化我的问题。如何锁定oculus rift HMD,使其仅允许旋转而不允许位置跟踪。

1 个答案:

答案 0 :(得分:0)

我想出了如何将HMD锁定为仅允许旋转而不是位置跟踪的方法。要添加坐姿,只需使用坐着的身体动画即可。我做了两件事。首先,我向OVRCameraRig脚本添加了一行代码:

trackingSpace.localPosition = -1 * centerEyeAnchor.localPosition;

这是在RaiseUpdatedAnchorsEvent()之前完成的;在UpdateAnchors()方法中的第260行周围进行调用。它的作用是锁定头部位置,仅允许头部旋转。

我做的第二件事是根据对其他问题之一的@derHugo回答编写头部重定位脚本。这是当按下空格键时它将移动整个OVRCameraRig位置。 要使其正常工作,必须在OVRC​​ameraRig上有一个父级。在下面的屏幕快照中,您可以看到CameraParent对象为父级。我使用球体作为重定位对象,该球体放置在播放器模型头部的中间。我必须添加此选项的原因有时是在您点击播放时,播放器会根据耳机开始的位置在一个奇怪的位置开始播放。 在屏幕截图中,您可以看到在检查器中未检查使用位置跟踪,这是一个错误。请保持选中状态以防止耳机破裂。

enter image description here

以下是游戏中玩家改变位置的代码:

public class VRPositionChange : MonoBehaviour
{
    public Transform resetPos;
    private Transform parent;
    private void Awake()
    {
        // create a new object and make it parent of this object
        parent = gameObject.GetComponentInParent<Transform>();
    }

    // Update is called once per frame
    private void Update()
    {


        if (Input.GetKeyDown(KeyCode.Space))
        {

            // reset parent objects position
           parent.position = resetPos.position;
        }
    }
}