目前我正在为有无障碍访问限制的人开发一款游戏。我遇到将玩家模型锁定在坐姿的问题。如果用户没有将自己置于房间的中心,则玩家模型将被拉向某个方向。我想将玩家模型锁定在座位上,并且只允许 ARM 运动和头部旋转,在使用 HMD 的游戏中不允许倾斜或移动。
由于我使用的是 Final VR IK 资源,我尝试使用他们的演示来确定 VR 中的坐姿,但无法让玩家自然地保持坐姿。我不确定如何对此进行编程或设置限制来做到这一点。
编辑:为了简化我的问题。如何锁定 oculus rift HMD 以仅允许旋转而不允许位置跟踪。
最佳答案
我想出了如何将 HMD 锁定为仅允许旋转而不允许位置跟踪。要添加坐姿,只需使用坐着的 body 动画即可。我做了两件事。首先,我在 OVRCameraRig 脚本中添加了一行代码:
trackingSpace.localPosition = -1 * centerEyeAnchor.localPosition;
这是在 RaiseUpdatedAnchorsEvent() 之前完成的;在 UpdateAnchors() 方法的第 260 行左右调用。其作用是锁定头部位置并仅允许头部旋转。
我做的第二件事是根据 @derHugo 对我的其他问题之一的回答编写一个头部重定位脚本。其作用是,当按下空格键时,它将移动整个 OVRCameraRig 位置。 OVRCameraRig 上必须有一个父对象才能正常工作 在下面的屏幕截图中,您可以看到 CameraParent 对象作为父对象。我使用一个球体作为重定位对象,将其放置在玩家模型头部的中间。我必须添加这一点的原因是,有时当您点击播放时,播放器会从一个奇怪的位置开始,具体取决于耳机开始时的位置。 在屏幕截图中,您可以看到使用位置跟踪未在检查器中进行检查,这是一个错误。请保持选中状态,以防止耳机屏幕撕裂
以下是在游戏中改变玩家位置的代码:
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/