Unity中各类物理投射性能横向比较

Posted HONT blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity中各类物理投射性能横向比较相关的知识,希望对你有一定的参考价值。

最近在优化摄像机部分代码,抽了个时间对物理投射这块进行了系统性的测试,发现了不少东西

 

测试工程下载地址:

http://files.cnblogs.com/files/hont/RaycastTestProj.rar

 

 

测试方式:

在某半径内随机若干Cube,然后以中心点发射各种投射进行测试

使用Unity5.4.1版本,并用Profiler和StopWatch进行测试并截图,比较性能和GC差异

 

由于胶囊之类的投射实在太慢了,我改用1000次调用进行测试,NonAlloc缓存数组长度为20

一些投射都做了距离限定

 脚本基本如下:

for (int i = 0; i < 1000; i++)
{
    Physics.BoxCastAll(transform.position, Vector3.one * 2f, Vector3.forward, Quaternion.identity, 0);
}

 

 

 

测试结果: 

名称 速度 GC Alloc
Raycast 1ms -
RaycastNonAlloc 2ms -
RaycastAllTest 2ms 273.4KB
Linecast 1ms -
BoxCastTest 17ms -
BoxCastNonAllocTest 18ms -
BoxCastAllTest 20ms 1.5MB
CheckBoxTest 1ms -
OverlapBoxTest 62ms 2.4MB
OverlapBoxNonAllocTest 24ms -
CapsuleCastTest 162ms -
CapsuleCastNonAllocTest 227ms -
CapsuleCastAllTest 336ms 12.7MB
CheckCapsuleTest 1ms -
OverlapCapsuleTest 84ms 2.1MB
OverlapCapsuleNonAllocTest 30ms -
SphereCastTest 96ms -
SphereCastNonAllocTest 171ms -
SphereCastAllTest 226ms 8.8MB
CheckSphereTest 1ms -
OverlapSphereTest 33ms 1.5MB
OverlapSphereNonAllocTest 16ms -

 

 

 

射线和线段的开销非常小,撇开这个可以发现,性能消耗的顺序是这样的

从小到大:

CheckXXX -> OverlapXXX -> XXXCast

其中Check系列方法的开销极小

 

从投射物来看,从小到大分别是:Box > Sphere > Capsule

以上是关于Unity中各类物理投射性能横向比较的主要内容,如果未能解决你的问题,请参考以下文章

objectCast 横向投射

Unity中各类加载方式的比较

光线投射和二维阵列在 Unity 中的魔方无法按预期工作

unity为啥射线投射到UI上面会返回空?

Unity中的抓钩射线投射方向问题

Unity HTFramework框架(四十)Debug的性能监控