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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM