性能检测发现string的对比耗时相当长,所以物理检测使用遮罩是很有必要的,因为遮罩应该是已经被转为了int储存,对比不会调用string的方法浪费性能
使用string对比264.7ms
image.png
使用Int和unity遮罩(都是int类型) 66ms
image.png
Collider[] cols = Physics.OverlapSphere
物理圆圈本身不怎么消耗性能,但是产生的Collider的获取Gameobject很吃性能
从cols[i].gameobject 改为提前缓存,性能大幅度提升(24.7ms当前),带有查找的字典等可能是相似的,所以别的组类型都建议缓存,不会多次申请内存空间
GameObject g = null ;
while (nowRadius < blackBoard.ChaseRadio)
{
//Log.I("检测3");
//球形射线检测,得到半径radius米范围内所有的物件
Collider[] cols = Physics.OverlapSphere(blackBoard.gameObject.transform.position, nowRadius,LayerMask.GetMask("Enemy"));
//Debug.Log(cols.Length);
//判断检测到的物件中有没有Enemy
if (cols.Length > 0)
for (int i = 0; i < cols.Length; i++)
g = cols[i].gameObject;
if (g.activeSelf)
if (g.GetComponent<Enemy>().blackBoard.camp != blackBoard.camp)
image.png