我正在研究Cannon.js,想知道如何实现这一点。
我的用例是,我在地板上有一个圆形区域,如果玩家走进去,他们将触发一些互动。我不想为此做光线投射,因为我已经将Cannon.js用于其他冲突,并且觉得光线投射会增加另一层性能延迟。
现在我的播放器对象是一个简单的球体形状的RigidBody,我通过设置它的速度来移动它。我把交互区做成一个高度很低的圆柱形。然而,当玩家经过这个物体时,碰撞被成功地记录下来,但是玩家失去了控制,并且在移动中有一个明显的凹凸。
有没有为Cannon.js注册这类对象的标准方法?我希望它不会有凹凸,就好像它是一个看不见的物体,玩家可以通过,但它仍然会记录碰撞。
发布于 2020-07-21 19:44:27
在游戏中解决这个问题的典型方法是使用触发器。因此,物理引擎与此主题无关。
触发器可以实现为简单的边界体积,如边界球体。在three.js中,它是THREE.Sphere的一个实例。在每个模拟步骤中,您将测试触发器是否由播放器激活。您可以通过多种方式完成此操作。例如,仅通过Sphere.containsPoint()测试玩家的位置是否在边界球体内。或者,您将玩家表示为另一个边界体积,如边界球体或AABB (通过THREE.Box3),然后执行交叉点测试。
这两种方法都非常快,应该不会明显影响你的应用程序的性能。即使您正在使用更多可能激活触发器的游戏实体进行这些测试。
下面是一个简单的示例,它演示了Yuka中触发器的概念
https://stackoverflow.com/questions/63010108
复制相似问题