代码检查:可用的非分配方法替代
射线投射 和 碰撞检测 方法在 Physics 和 Physics2D 对象中,如果返回数组,则每次调用都会分配数组,这可能会影响性能,尤其是在频繁调用的情况下。 Unity 5.3 引入了这些方法的非分配版本,可以传入预先分配的数组来收集结果。
此检查会对这些方法的分配版本添加警告,并提供快速修复,将调用重写为非分配版本,并将文本光标放在可引用现有数组的位置。
Physics 类中的相关方法有:
对于 Physics2D:
Physics2D.GetRayIntersectionAll > Physics2D.GetRayIntersectionNonAlloc
Physics2D.OverlapCapsuleAll > Physics2D.OverlapCapsuleNonAlloc
Physics2D.OverlapCircleAll > Physics2D.OverlapCircleNonAlloc
请注意,数组的大小决定了这些非分配方法收集结果的最大数量。 这些方法不会调整数组大小,也不会通知如果有更多结果可以返回。 需要为该数组选择合适的大小,可以通过确定可能的最大结果数或者选择超过该数量后不再需要更多结果来决定。 如果需要处理所有可能的命中,分配版本应该作为唯一可用的选项,但需要注意重复分配带来的性能开销。 可以通过 代码注释屏蔽此警告 ,也可以 更改高亮显示的严重级别。
更多详情请参见该 Unity 性能最佳做法文档。
2026年 5月 8日