c# - Unity Final VR IK( Assets )将人锁定在坐姿

标签 c# unity-game-engine constraints accessibility oculus

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

由于我使用的是 Final VR IK 资源,我尝试使用他们的演示来确定 VR 中的坐姿,但无法让玩家自然地保持坐姿。我不确定如何对此进行编程或设置限制来做到这一点。

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

最佳答案

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

trackingSpace.localPosition = -1 * centerEyeAnchor.localPosition;

这是在 RaiseUpdatedAnchorsEvent() 之前完成的;在 UpdateAnchors() 方法的第 260 行左右调用。其作用是锁定头部位置并仅允许头部旋转。

我做的第二件事是根据 @derHugo 对我的其他问题之一的回答编写一个头部重定位脚本。其作用是,当按下空格键时,它将移动整个 OVRCameraRig 位置。 OVRCameraRig 上必须有一个父对象才能正常工作 在下面的屏幕截图中,您可以看到 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;
        }
    }
}

关于c# - Unity Final VR IK( Assets )将人锁定在坐姿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57114294/

相关文章:

c# - 非mshtml c#解析html和javascript

c# - 在 C# 中的字符串列表中查找字符串

c# - Azure 应用程序给出 HRESULT E_FAIL 已从对 COM 组件的调用返回

unity-game-engine - 我可以在游戏中混合 2d 和 3d 场景吗

unity-game-engine - Unity3d : how to detect click within an area

ios - 将 View 高度约束覆盖为零时应用程序崩溃

swift - UISearchBar 与 UINavigationBar 重叠?

c# - 您使用什么工具和技术来查找死代码?

unity-game-engine - 如何使用 Unity 使 Firebase 分析符合 COPPA?

c++ - 如何使用模板表达成员之间的约束?