编辑:在做了更多的调试之后。由于某种原因,速度矢量似乎读数为零(对于这两种方法)。有什么建议么?
我正在尝试在 Unity 中为 Oculus Quest 制作一个简单的手部追踪演示。我能够成功地实现一个抓取和释放机制,类似于这里的本教程。Oculus 插件的状态有点过时,但整体逻辑保持不变。
我遇到的唯一问题是实现 Drop 功能。当我放下一个物体时,我想将我手的线速度和角速度添加到物体上。我尝试通过以下方式做到这一点:
抓取脚本:
protected override void GrabEnd()
{
if (m_grabbedObj)
{
Debug.Log("Grabbed object found");
Rigidbody rigid = GetComponent<Rigidbody>();
if (rigid)
{
GrabbableRelease(rigid.velocity, rigid.angularVelocity);
}
else
{
Vector3 linearVelocity = (transform.position - lastPointerPos) / Time.fixedDeltaTime;
Vector3 angularVelocity = (transform.eulerAngles - lastPointerRot.eulerAngles) / Time.fixedDeltaTime;
GrabbableRelease(linearVelocity, angularVelocity);
}
}
GrabVolumeEnable(true);
}
Grabbable 内部:
virtual public void GrabEnd(Vector3 linearVelocity, Vector3 angularVelocity)
{
Rigidbody rb = gameObject.GetComponent<Rigidbody>();
rb.velocity = linearVelocity;
rb.angularVelocity = angularVelocity;
}
在这两者之间还有一个函数,但本质上它只是在传递速度的对象上调用 GrabEnd。
我还确保了抓取器(手)和可抓取物体上都有刚体。
lastPointerPos
&lastPointerRot
是在 FixedUpdate 结束时保存的 Vector3。我还在检查是否需要根据食指的 PinchStrength 和 Confidence 在 FixedUpdate 内调用 GrabEnd。
我有两种方法的原因只是我尝试解决这个问题的两种不同方法。两者似乎都不起作用。无论我如何像客厅里的傻瓜一样挥舞双臂,物体都会直接掉到地板上哈哈
任何帮助将不胜感激!