如何通过跳跃运动统一抓取和移动游戏对象

How to grab and move gameObjects in unity with leap motion

我正在制作一个具有 unity 和 leap motion 的项目,但我是 leap 新手。我正在尝试移动 gameObjects,但是当我向它添加 rigidBody 的 属性 并用它飞走的手模型触摸它时,我该如何避免这种情况?

我认为你应该使用协程来移动它。您可以在此处找到更多信息:https://docs.unity3d.com/Manual/Coroutines.html 这应该无需太多代码即可解决问题。

因为 Leap 在其核心资产中提供的默认物理手被解释为 "kinematic," 它们基本上具有无限质量。当你试图抓住或触摸它们时,物体会飞走,因为底层物理求解器正在试图弄清楚当你在另外两个无限质量的刚体之间压碎一个完全刚体(因此 "Rigidbody")时会发生什么......解算器以巨大的速度结束,结果你得到的行为看起来很奇怪而且感觉很糟糕。

为了让触摸和抓取物体感觉良好,涉及一些奇特的数学(Kabsch 求解)和实时物理(软、非刚性接触行为),因此您可能只想下载 Leap 的交互引擎,为您完成所有这些!

确保您拥有 main developer resource page 中的最新 "Core Assets",您可以在同一页面上找到 "Interaction Engine"。

下载这些包并将它们导入Unity,那么你的工作流程基本上就可以这样工作了:

  • 在 InteractionEngine 文件夹中找到 InteractionManager 预制件,并将其拖到您的场景中。该对象只是为交互系统做必要的记账。
  • 从 Hand Controller 中删除那些 RigidRoundHands,然后在 InteractionEngine 文件夹中添加 Interaction Brush Hands。这些手有额外的物理逻辑,可以防止交互像您描述的那样爆炸。
  • 将 InteractionBehaviour 组件添加到您希望能够触摸或拾取的任何对象。

从那里开始,您应该可以开始了。如果某个步骤停止工作,您可以查看开发者页面上的 Interaction Engine 101 示例;它是一个开源 Unity 项目,具有最新交互引擎的工作实现。