首页 > 代码库 > Unity中各类物理投射性能横向比较

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

 

测试工程下载地址:

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

 

 

测试方式:

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

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

 

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

一些投射都做了距离限定

技术分享

 

using UnityEngine;
using System.Collections;
using System.Diagnostics;

public class BoxCastAllTest : MonoBehaviour
{
    void Update()
    {
        var stopWatch = new Stopwatch();

        stopWatch.Start();

        Profiler.BeginSample("BoxCastAllTest");

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

        Profiler.EndSample();

        stopWatch.Stop();

        UnityEngine.Debug.Log("StopWatch: " + stopWatch.ElapsedMilliseconds);
    }
}

 

 

 

测试结果:

名称 速度 GC Alloc
Raycast 1ms 0
RaycastAll 2ms 273.4KB
RaycastNonAlloc 1ms 0
BoxCast 18ms 0
BoxCastAll 38ms 3.2MB
BoxCastNonAlloc 36ms 0
SphereCast 86ms 0
SphereCastAll 192ms 8.8MB
SphereCastNonAlloc 183ms 0
CapsuleCast 139ms -
CapsuleCastAll 449ms 19.6MB
CapsuleNonAlloc 263ms 0

 

 

球形投射和胶囊投射的开销都比较大,并且各种投射的速度开销都远高于直接发射射线。

可见,如果优先选择射线进行判断,就会对游戏优化有不少帮助

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