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

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

 

测试工程下载地址:

https://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

posted @   HONT  阅读(12780)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2014-12-14 C#实现接口xml序列化与反序列化
点击右上角即可分享
微信分享提示
回到顶部