unity 怎么获取一定范围内的unity碰撞体体

关于unity碰撞体检测有三个经典的問题:

1.物体之间检测到unity碰撞体的必要条件是什么?(经典面试题)
2.物体速度过快导致穿透unity碰撞体体怎么办(项目中要经常面对这个问题)
3.什么时候要给unity碰撞体体加刚体,什么时候不用加(我自己编的:))

两个物体都要有unity碰撞体体,其中至少要有一个物体有刚体

以上問题和***没有提及是什么样的unity碰撞体,是Collision还是Trigger关于这两种unity碰撞体什么情况下可以检测到,可以从以下图表中得到***:

这个问题又很哆***比如考虑能否降速,能否加大unity碰撞体体的厚度能否使用射线进行预判,能否减小Time Manager中的Fixed TimeStep等这里提供另一种官方推荐的方法——提高unity碰撞体检测的级别。

continous要比discrete的检测级别更高当然性能消耗也更大;实际工程中尽量使用discrete,但是遇到穿透问题的时候可以考虑是否有必要牺牲性能来解决上述问题。

考虑是否加刚体当然看你是否需要刚体组件啦!不过这里还有另一种考虑,就是刚体对unity碰撞体体的影响没有刚体的unity碰撞体体会被unity引擎当做是静态unity碰撞体体,unity认为静态unity碰撞体体是不会动的并基于此做一些优化,所以一旦你让静态unity碰撞体体(没有刚体的unity碰撞体体)运动(例如:上下浮动的金币上只有unity碰撞体体没有刚体)不但会造成极大的性能消耗,有时还会发生一些意想鈈到的问题

所以,从unity碰撞体检测性能角度讲不动的物体可以只加unity碰撞体体不加刚体,运动的物体一定要加刚体

那么有时候我们希望┅个物体运动又不希望它受力的影响(比如上述金币),该怎么办呢这是可以把这个刚体isKinematic设为true。

参考资料

 

随机推荐