UPL5-10——复杂计算结果缓存
UPL5-10——复杂计算结果缓存
复杂计算结果缓存
复杂计算结果缓存指的是避免重复执行开销大的运算,将结果缓存起来复用,从而减少 CPU 运算量和时间消耗
这类优化尤其适用于 频繁执行但变化不频繁 的逻辑
常会缓存的计算结果
-
数学计算结果缓存
我们可以在初始化项目基础数据时,把各种数据提前算好
以三角函数为例,我们可以用一个float 数组存储0~359 度所有Sin、Cos等等三角函数值1
2
3
4
5float[] allSin = new float[360];
for (int i = 0; i < 360; i++)
{
allSin[i] = Mathf.Sin(i * Mathf.Deg2Rad);
} -
寻路计算结果缓存
如果项目中存在 A* 寻路等寻路算法,可以用容器缓存两个点之间的路径,
下次寻路时,发现存在已寻路点,直接获取路径来使用 -
静态配置数据缓存
对于配置表中数据,特别是需要频繁使用的表,我们应该在进入游戏时就反序列化后存储在内存中
避免每次使用配置数据,都重复反序列化 -
物理投射数据缓存
物理投射指的是用虚拟形状去探测物体之间的空间关系,常用于碰撞、视野、攻击等逻辑判断
Unity中的射线检测、范围检测等相关 API 都属于物理投射 API
如果在位置、范围、相对坐标都不变的情况下,如果存在经常复用,也可以将其结果缓存下来,避免每次重复计算 -
Shader 参数的缓存
应该避免频繁重复设置 Shader 属性、提升 CPU 到 GPU 的通讯效率
比如:在Update 中每帧设置 Shader 参数 :mat.SetFloat("_Speed", 5.0f);
我们可以在 C# 中将数据缓存下来,当真正发生变化时再传递给着色器进行处理
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 文KRIFE齐的博客!
