对于我正在开发的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轴上移动,而它根本不旋转。目前,我仍然可以旋转对象。每当我抓住物体时,如何解决此问题并完全锁定旋转?
答案 0 :(得分:1)
如果该对象已成为手的子代,并且您仍希望它移动但不旋转。您可以添加一个简单的脚本,该脚本会为其默认轮换评分并在LateUpdate中应用。
这是为非物理对象设计的,因此请确保在将刚体添加到墙壁的地方删除测试。
像这样简单的事情就可以完成。
Quaternion defaultRotation;
void Awake()
{
defaultRotation = transform.rotation;
}
void LateUpdate()
{
transform.rotation = defaultRotation;
}