--- tags: - 性能优化 - 动态图集 --- --- ### 目的 - 减少*零散图标*导致使用不同材质球的批次 - 需要注意*内存(在显存中)*的开销,如果释放策略不对,有可能导致内存泄露 - [[2Areas/游戏开发/Texture、Texture2D与RenderTexture|Texture、Texture2D与RenderTexture]] - [[通过Unity申请的RenderTexture的内存在显存中还是在内存中]] ### 过程注意 - 算法 - 通过 - 页 - 负责记录有哪些图片,以及所在的位置,和对应的PageId - 插入策略 - 在页满的时候,先找外部传进来的策略先释放掉RefCount\==0的位置 - 再根据权重重新排列 - 计算重新排列后的空间是否足够插入 - 回调 - 当页因为释放/重排等原因变换位置的时候需要触发区域变换的回调通知到每个涉及到的图片Handle - 释放 - 定时器+脏标 - 每次释放重置定时器的倒计时,在倒计时结束的时候如果为脏标,则触发重排重新计算权重 - 脏标干净的时候,不触发定时器的tick - Debug - 需要告知页的数量 - 每个handle的refCount,出生时间,最后调用时间,所在页Id,所在区域 - Blit - 需要注意,不要使用SetPixel,因为这种方法是CPU的耗时 - 使用Graphics.Blit,这种方法是告知GPU往RT上Blit ### 结果 - 一张2048 * 2048的图片,对于主场景能减少20个批次左右 - 方便为未来的HUD功能做铺垫