Unity Final VR IK (Asset) 将人物锁定在坐姿

Unity Final VR IK (Asset) lock person in sitting position

目前我正在为有无障碍访问限制的人开发一款游戏。我遇到了将玩家模型锁定在坐姿的问题。如果用户没有将自己置于房间中心,玩家模型将被拉向某个方向。我想将玩家模型锁定在座位上,并且只允许手臂运动和头部旋转,在使用 HMD 的游戏中不能倾斜或移动。

由于我使用的是 Final VR IK 资产,所以我尝试使用他们的演示来确定 VR 中的坐姿,但无法让玩家保持自然坐姿。我不确定如何对此进行编程或设置限制才能执行此操作。

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

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

trackingSpace.localPosition = -1 * centerEyeAnchor.localPosition;

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

我做的第二件事是根据@derHugo 对我的其他问题之一的回答编写了头部重定位脚本。它的作用是当 space 条被按下时它会移动整个 OVRCameraRig 位置。 OVRCameraRig 上必须有一个 parent 才能工作 在下面的屏幕截图中,您可以看到 CameraParent object 作为 parent。我使用一个球体作为重定位 object,它被放置在我的玩家模型头部的中间。我不得不添加这个的原因是有时当你点击播放时,播放器会从一个奇怪的位置开始,这取决于耳机开始时的位置。 在屏幕截图中,您可以看到在检查器中未检查使用位置跟踪,这是一个错误。请保持选中以防止耳机屏幕撕裂

这是游戏中玩家位置变化的代码:

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