目前,我正在为有辅助功能限制的人制作游戏。我遇到了将播放器模型锁定在坐姿的问题。如果用户不在房间中居中,则将播放器模型拉向某个方向。我想将玩家模型锁定在座位上,并且只允许手臂运动和头部旋转,而不能使用HMD在游戏中倾斜或移动。
由于我使用的是最终VR IK资产,因此我尝试使用其演示在VR中的坐姿,无法让玩家自然坐下。我不确定如何对此进行编程或设置限制以能够执行此操作。
编辑:为简化我的问题。如何锁定oculus rift HMD,使其仅允许旋转而不允许位置跟踪。
答案 0 :(得分:0)
我想出了如何将HMD锁定为仅允许旋转而不是位置跟踪的方法。要添加坐姿,只需使用坐着的身体动画即可。我做了两件事。首先,我向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;
}
}
}