附加包性能优化
WARNING
本页内容主要基于多方社区反馈整理而成。因此部分信息可能存在概括性、主观性或相互矛盾的情况。优化附加包时请始终自行判断。本页面不能替代在多种设备上测试附加包的实际效果。
附加包性能至关重要——即便技术上最出色的附加包,如果大多数玩家设备无法流畅运行,也将失去意义。开发附加包时需始终牢记:许多基岩版玩家使用的设备性能远低于您的开发设备,移动端用户尤其如此。因此开发时应注重性能优化,并尽可能在低端设备上进行测试。
本指南按基岩版各子系统分类,列出非穷尽性的具体性能考量事项。任何单项都不应被视为铁律,这些建议旨在帮助您识别潜在的优化方向。
生物群系与地物生成
生物群系
- 生物群系系统整体运行高效
- 通常能妥善处理较大的高度图数值
climate组件会产生大规模粒子风暴
地物生成
- 生物群系通常比地物生成造成的卡顿更少
- 每个区块生成数百次多方块地物对性能影响较小
- 每个区块生成数千次多方块地物将影响游戏体验
- 每个区块生成数十万次单方块地物对性能影响较小
- 每个区块生成数千个地物实例几乎无性能损耗
- 每个区块生成数万个地物实例会明显拖慢区块加载
- 每个区块生成数十万个地物实例将导致区块加载缓慢到难以忍受
方块
材质类型
- 应始终使用渲染需求最低的材质类型
alpha_blend性能差于alpha_test,后者又差于opaque
数量与类型
- 应避免或尽量减少流动液体
更新机制
- 应尽量减少方块更新
命令
数量与类型
- 需减少每游戏刻运行的命令数量
每刻运行的
/effect和/gamemode命令可避免且对性能影响显著
- 应避免在运行时进行大规模克隆、填充和结构加载
将这些大型操作拆分为跨多游戏刻执行的多个命令可避免卡顿,建议使用结构加载动画
选择器
- 注意确保函数不会在过多实体上重复执行
- 执行记分板命令的成本高于多次解析实体选择器
- 使用c=1确保选择器在找到第一个实体后停止可提升性能
- 当对相同选择器执行多个命令时,改用函数可避免重复解析
标签与记分板
- 大规模使用时记分板性能优于标签
实体
- 实体通常是各子系统中性能影响最大的因素,应尽可能减少
组件
- 飞行生物的寻路计算性能消耗显著
- 飞行生物普遍存在性能问题
如有可能,建议通过动画模拟飞行生物
虚拟实体
- 虚拟实体与常规实体性能影响相当,除非排除寻路等重型组件
几何结构
骨骼
- 骨骼数量未观测到性能影响
元素
- 元素数量通常不成问题,除非达到数千的极端情况
材质
- 应始终使用实现效果所需的最低限度材质
- 不确定时可参考材质定义文件,注意材质继承系统的开销
数量
- 应尽量减少同时加载的实体数量
30个以下为最佳
光照
地图设计
- 中空区域即使不可见也会因光照计算导致卡顿
通过填充未使用的封闭空间来避免
- 保持地图固定为白天或夜晚可避免光照重计算
光源类型
- 基岩版光照为动态计算,不同光源性能开销不同
光源方块性能最佳,因其无粒子、无渲染且无特殊状态逻辑
火把因产生粒子、需要渲染且存在与连接方块相关的状态逻辑,会造成轻微性能问题
组件精简的自定义光源方块是性能与美观的合理折中
对比表格
| 光源类型 | 评分 | 红石更新 | 动态纹理 | 光照更新 | 刻更新 | 粒子效果 | 渲染需求 |
|---|---|---|---|---|---|---|---|
| 光源方块 | 1 | 否 | 否 | 是 | 否 | 否 | 否 |
| 灯笼 | 4 | 否 | 是 | 是 | 是 | 否 | 是 |
| 自定义方块 | 2 | 否 | 否 | 是 | 否 | 否 | 是 |
| 蘑菇灯 | 3 | 否 | 否 | 是 | 是 | 否 | 是 |
| 红石灯 | 3 | 是 | 否 | 是 | 否 | 否 | 是 |
| 萤石 | 3 | 是 | 否 | 是 | 是 | 否 | 是 |
| 海晶灯 | 4 | 否 | 是 | 是 | 是 | 否 | 是 |
| 火把 | 4 | 否 | 否 | 是 | 是 | 是 | 是 |
| 红石火把 | 5 | 是 | 否 | 是 | 是 | 是 | 是 |
Molang
递归
- 尽可能减少递归使用
- 深层嵌套循环结构会导致性能问题
- 适时使用break跳出循环
结构体
- 避免结构体嵌套过深,每层都会增加性能开销
变量
- 尽量使用临时变量减少内存加载
- 根据脚本类型考虑变量计算频率
纹理
texture_list.json
- 过多纹理严重影响性能。请创建
texture_list.json文件。
数量
- 使用纹理不超过3000个
这是Render Dragon渲染引擎的限制
Render Dragon有4096个纹理的数量限制,而1.16版本原版已占用800个
分辨率
- 最大纹理分辨率为16384x16384
- 为保持低端设备兼容性,建议最大4096x4096
- 注意纹理会进行图集化,过大纹理可能影响低端设备的图集生成
- 只需确保纹理在所需观察距离能呈现必要细节即可
交易系统
村民交易达到60项或更多时会在所有设备上引发性能问题甚至崩溃。应避免为单个实体设置过多交易。 最佳解决方案是将交易对半拆分到另一个村民或自定义实体/NPC上,测试表明30项交易是安全数值。 可能由JSON用户界面问题导致
音效
数量
- 已注册音效总数会影响性能
压缩
- 音效压缩能显著减小包体积
- 在Switch等老旧或低功耗设备上效果尤为明显
- 基岩版使用的FMod简单API会在加载到内存前将所有音效解压为WAV格式,因此不会降低CPU负载
流式音频除外
流式播放
- 通常建议对超过500KB或1分钟的音效采用流式播放
红石
区块边界
- 应避免红石电路跨越区块边界
命令方块
- 构建大型命令方块链时,应在单一区块内垂直堆叠
- 尽可能用函数和行为包替代命令方块
常加载区域
- 区块总数比常加载区域数量更值得关注
- 除非必要,应避免动态常加载区域
- 最佳实践是将常加载区域控制在单个区块
所有持续运行的红石电路都应设在此区块内
- 不再需要时通过/testforblock检测并卸载常加载区域
文件管理
- 过多文件会严重影响性能。请创建
contents.json文件。




