UPL5-10——复杂计算结果缓存

复杂计算结果缓存

复杂计算结果缓存指的是避免重复执行开销大的运算,将结果缓存起来复用,从而减少 CPU 运算量和时间消耗
这类优化尤其适用于 频繁执行但变化不频繁 的逻辑

常会缓存的计算结果

  1. 数学计算结果缓存

    我们可以在初始化项目基础数据时,把各种数据提前算好
    以三角函数为例,我们可以用一个 float​ 数组存储 0~359​ 度所有 Sin​、Cos 等等三角函数值

    1
    2
    3
    4
    5
    float[] allSin = new float[360];
    for (int i = 0; i < 360; i++)
    {
    allSin[i] = Mathf.Sin(i * Mathf.Deg2Rad);
    }
  2. 寻路计算结果缓存

    如果项目中存在 A* 寻路等寻路算法,可以用容器缓存两个点之间的路径,
    下次寻路时,发现存在已寻路点,直接获取路径来使用

  3. 静态配置数据缓存

    对于配置表中数据,特别是需要频繁使用的表,我们应该在进入游戏时就反序列化后存储在内存中
    避免每次使用配置数据,都重复反序列化

  4. 物理投射数据缓存

    物理投射指的是用虚拟形状去探测物体之间的空间关系,常用于碰撞、视野、攻击等逻辑判断
    Unity 中的射线检测、范围检测等相关 API 都属于物理投射 API
    如果在位置、范围、相对坐标都不变的情况下,如果存在经常复用,也可以将其结果缓存下来,避免每次重复计算

  5. Shader 参数的缓存

    应该避免频繁重复设置 Shader 属性、提升 CPU 到 GPU 的通讯效率
    比如:在 Update​ 中每帧设置 Shader 参数 :mat.SetFloat("_Speed", 5.0f);
    我们可以在 C# 中将数据缓存下来,当真正发生变化时再传递给着色器进行处理