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