# 内存优化

# 前言

内存的优化对中低端机型极其敏感与有意义,随着MC内容的增长,和开发者上架MOD的越来越多。玩家在游戏中可能装载的MOD,能体验的内容也越来越多。中低端设备内存的瓶颈变得越来越明显。所以很有必要做内存上面的优化。

# 资源大小优化

# 贴图分辨率

# 意义

贴图的分辨率控制非常重要。首先会直接决定贴图加载的速度和占用的内存。其次因为内部实现会把方块,物品的多张贴图打成一张图集,单张贴图分辨率大也会造成整体这个图集分辨率太大,在使用图集的时候性能也会有所下降,所以不要觉得我有一个物品,用了非常高清分辨率很高的贴图,但只要我不使用这个物品,对游戏性能就没有影响。

# 两个原则

  1. 贴图清晰的基础上尽量小: 比如500 * 500的贴图如果缩小为100 * 100之后效果相差不大,则建议直接缩小到100 * 100

  2. 贴图尽量为2次幂,尺寸为2次幂的贴图在加载和渲染时比较友好: 例如:1200 * 1200的贴图建议缩小到1024 * 1024; 20 * 20的贴图建议缩小到16 * 16。

# PNG贴图压缩

使用到PNG贴图的时候,可以用pngquant工具先进行压缩,接近于无损压缩

# 音频

音效的资源格式尽可能使用ogg格式的文件,wav格式文件压缩率较低

# 贴图预加载

贴图资源的加载并不是都在加载存档的时候加载的,很多时候是在需要显示这张贴图的时候才会进行异步加载,而异步加载是需要一定时间的,那就会导致这张图片一段时间内无法显示出来,当执行比较快的图片切换的时候,首次显示图片可能就会出现闪烁问题,比较典型的情况可以参考 UI控件SelectionWheel的闪烁问题(注2中)

因此,我们需要在加载存档的时候一开始就指定加载这些贴图,保证后续使用的时候它们已经加载进内存,不用再进行异步加载。可以通过文件 "your_resourcepack/textures/preload_textures_list.json" 进行指定,文件若不存在可以手动创建,以上面的问题为例子写一个文件,当前需要预先加载的是如下图的这些图片

闪烁问题素材

则 preload_textures_list.json 为

[
    "textures/ui/SelectionWheel/1/custom_wheel_selection_0",
    "textures/ui/SelectionWheel/1/custom_wheel_selection_1",
    "textures/ui/SelectionWheel/1/custom_wheel_selection_2",
    "textures/ui/SelectionWheel/1/custom_wheel_selection_3",
    "textures/ui/SelectionWheel/1/custom_wheel_selection_4",
    "textures/ui/SelectionWheel/1/custom_wheel_selection_5",
    "textures/ui/SelectionWheel/1/custom_wheel_selection_default"
]

# 动态加载

资源如果不是频繁使用的,尽量不要预加载,应该在使用到的时候再进行加载

骨骼模型系统(不常用的骨骼模型应该声明dy_load字段为true) netease_models.json:

{
    "datiangou" : {
        "skeleton" : "skeleton/datiangou_skeleton.json",
        "mesh" : "mesh/datiangou_mesh.json",
        "animation":{
            "fengxi":"animation/datiangou_animation_fengxi.json",
            "run": "animation/datiangou_animation_run.json"
        },
        "dy_load": true
    }
}

音频系统(不常用的音频应该声明在dy_load_list中) sound_definitions.json:

{
    "dy_load_list":[
      "sounds/testaudio/test",
      "sounds/music/game/test/test1",
  ]
}

https://nie.res.netease.com/r/pic/20210727/82dd4b1e-04e1-4a90-a4c5-1a4d5cec462a.png

进阶

20分钟

前言

资源大小优化

贴图分辨率

音频

贴图预加载

动态加载