游戏大量删除物体时的优化
比如有割草游戏,当玩家在场景中怪物最多的地方释放一个AOE技能,范围内的怪物全部死掉,这时候就需要把这些怪物删除
如果玩家不听的在施放技能,而怪物刷新又比较快的情况下,大约会有2种办法
第一种是写对象池,
第二种是直接销毁怪物
如果真的采用这种
加入频繁的销毁怪物的话,势必造成手机的计算压力,所以我们可以尝试不在技能施放完毕后立即销毁,而是分为几个阶段销毁,打个比方,如果玩家一个技能造成了20个怪物的死亡,而我们则不需要在玩家玩家释放完技能的这一帧中销毁怪物.而是可以尝试在第一帧中销毁1-3个,第二帧销毁1-3个一直到销毁完毕.
代码示意如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class jxyh : MonoBehaviour
{
public List<GameObject> list;
// Start is called before the first frame update
void Start()
{
list = new List<GameObject>();
for (int i = 0; i < 20; i++)
{
GameObject obj= GameObject.CreatePrimitive(PrimitiveType.Cube);
obj.transform.position = new Vector3(i+0.5f, 0, i+0.5f);
list.Add(obj);
}
StartCoroutine(DestoryEnermy(list));
}
IEnumerator DestoryEnermy(List<GameObject> ts)
{
int listLenth = ts.Count;
Debug.Log(listLenth);
while (ts .Count !=0)
{
yield return new WaitForFixedUpdate();
Destroy( ts[listLenth-1]);
list.RemoveAt(listLenth-1);
listLenth--;
}
}
}
频繁的更改字符串的优化
如果是需要频繁的修改string类型的字符串,那么对于这样的需求,我们在测试的时候发现,频繁修改string类型的字符串会消耗大量的资源,因为程序在一直执行着装箱和拆箱操作.如果换成stringBuild类型,那么将会大大减少性能消耗
StringBuilder sb =new StringBuilder("字符");
StringBuilder是可变长度的,其首先在内存中分配固定的长度,当进行频繁的插入和连接操作时,超出了内存中分配的长度会自动进行扩充,从而有效的节约了内存空间和减少了生成对象的时间。
正文完