如何使用Unity Oculus VR锁定抓取对象的旋转

时间:2019-08-24 08:34:14

标签: c# visual-studio unity3d virtual-reality

对于我正在开发的Oculus Quest游戏,我需要能够抓住一个物体并且不能以任何方式旋转它。我应该能够在x,y和z轴上移动它。我在攀岩游戏中这样做,并且物体很大。我的播放器处于锁定状态(0,0,0),您可以通过抓住地形并移动它来攀爬,给人您正在攀爬的错觉。

我正在使用Unity的Oculus集成资产,并且在要捕获的对象上具有OVR Grabbable脚本。

如何确保所抓取的物体完全不会旋转?

我已经尝试过使用刚体并锁定要攀爬的墙的旋转,但这种方法不起作用。抓住它之后,我仍然可以旋转对象。

我还尝试过锁定手刚体的旋转,但是由于我仍然可以旋转手,因此该设置似乎被忽略了。

我还尝试在脚本中添加一些代码,这将重置固定更新中的对象旋转。我将这段代码放在OVR Grabbable脚本中。

void FixedUpdate()
{
    transform.rotation = Quaternion.identity;
}

使用此代码并不能阻止墙旋转,但确实可以使每帧恢复到旋转(0,0,0)。这使墙像仍在旋转一样起作用,但是看起来它在(0,0,0)和每帧中的旋转之间切换。当然这也不是期望的结果。

我没有使用VRTK,因为这与我要实现的攀岩类型不兼容。

我希望能够抓住一个对象,使其在x,y和z轴上移动,而它根本不旋转。目前,我仍然可以旋转对象。每当我抓住物体时,如何解决此问题并完全锁定旋转?

1 个答案:

答案 0 :(得分:1)

如果该对象已成为手的子代,并且您仍希望它移动但不旋转。您可以添加一个简单的脚本,该脚本会为其默认轮换评分并在LateUpdate中应用。

这是为非物理对象设计的,因此请确保在将刚体添加到墙壁的地方删除测试。

像这样简单的事情就可以完成。

Quaternion defaultRotation;

void Awake()
{
    defaultRotation = transform.rotation;
}

void LateUpdate()
{
    transform.rotation = defaultRotation;
}