目的
本文的主要目的是让您了解如何在 Unity 引擎中使用无刚体的碰撞检测。
第一步介绍
我们实现了一个简单的示例,其中仅检测垂直运动游戏角色,但通过修改脚本并将对象添加到场景(或更改立方体的位置),也可以检测其他方向。
Unity是一款3D游戏引擎碰撞检测游戏引擎,内置物理引擎PhysXUI界面,这是Nvidia提供的物理引擎。
物理模拟应用于附加了刚体组件的游戏对象。
大多数时候它用于碰撞检测。
假设我们只需要来自物理引擎的碰撞检测模拟信息,那么只使用物理引擎进行碰撞检测可能会降低整体性能。有两种解决方法:
第二步解决方案
解决方案 - 1
制作刚体运动学并捕获触发事件。
解决方案 - 2
不要使用刚体(这可能是最好的解决方案)!!!
步骤 3 避免使用刚体
那么用什么来代替刚体呢?
光线投射是一个很好的选择。这是 Unity 引擎提供的众多丰富功能之一。而且这个功能不会消耗太多的计算资源。您可以每帧投射数百条光线,而不会过多影响游戏的性能。此方法从起点(用户指定)投射一条射线到终点(也是用户指定),然后确定该射线是否与任何对撞机相交。
我们可以使用这种方法通过在 x 和 y 轴上投射光线来处理碰撞检测,以了解游戏对象周围的环境。
我们将按照以下步骤进行:
1
获取游戏对象的方向信息。
2
投射光线。
3
碰撞信息由碰撞结果确定。
简单的光线投射代码如下所示:
在上面的函数调用中,第一个参数是射线的起点,第二个参数是射线的方向,第三个参数是射线的长度。
在Unity引擎中可以得到的结果如下:
让我们举一个简单的例子来说明这段代码。当一个立方体与另一个立方体碰撞时,我们让立方体撤退。
1.如下图排列三个立方体。
2.为三个立方体添加盒子碰撞器。
3.将 CollisionDetector 脚本添加到两个立方体之间的立方体(上图中选择的那个)。
4.在 CollisionDetector 脚本中添加代码,使立方体在与上方或下方的立方体碰撞时反弹回来。
3.1 碰撞检测器.cs
3.2 上面代码的解释
NoOfRays 和 Moving force 都是公共变量,因此可以在运行时根据需要进行更改。确保立方体的移动速度不超过顶部立方体和底部立方体之间的距离。
DirectionFactor 将运动力和射线的方向相乘,因为这决定了方向。在开始时,它的值设置为向上(正 y 轴)方向。一旦移动的立方体与其他立方体发生碰撞,运动的方向就会反转。您可以更改立方体移动的方向以响应方向矢量的更改。DirectionFactor 仅用于反转方向。
我希望这篇文章在你不在 Unity 引擎中使用刚体进行碰撞检测时对你有所帮助。如果您对 Unity 有任何疑问碰撞检测游戏引擎,请在评论中告诉我。我会尽快回复您。