Skip to content

自定义音效与音乐 ​

《我的世界》基岩版使用业界知名的 FMOD 音频引擎管理所有游戏音效与音乐。开发者可以通过在资源包中配置 sound_definitions.json 和 music_definitions.json,结合 ModSDK 脚本接口,实现自定义音效与背景音乐的添加和播放。

前置知识

阅读本文前,建议先了解 Addon 开发基础 中资源包的目录结构。

概述(FMOD 引擎) ​

MC 内置音频管理使用 FMOD 引擎,通过 SoundSystemFMOD 类对 FMOD API 进行封装和调用。在 Mod 中使用自定义音频有三种方式:

  1. Addon 数据驱动:通过 JSON 配置替换或新增音效
  2. ModSDK 接口调用:通过脚本控制音乐播放
  3. Music 指令:通过 MC 原生 music 指令触发

音频格式

当前版本仅支持 .ogg 格式的音频文件,不支持 .mp3 等其他格式。

待补充:三种方式的适用场景对比。

sound_definitions.json ​

在资源包的 sounds/ 目录下创建 sound_definitions.json,定义具体的音效资源内容。

json
{
  "my_custom_sound": {
    "category": "music",
    "min_distance": 0.0,
    "max_distance": 16.0,
    "sounds": [
      {
        "name": "sounds/custom/my_sound",
        "stream": true,
        "volume": 0.5,
        "load_on_low_memory": true
      }
    ]
  }
}

字段说明 ​

字段说明
category音频分类(music、ui、weather 等)
min_distance最小播放距离
max_distance最大播放距离
sounds[].name音频文件路径(不含扩展名)
sounds[].stream是否流式加载(建议大文件开启)
sounds[].volume音量大小
sounds[].load_on_low_memory低内存时是否加载

流式加载

当 stream 设为 true 时可减小内存占用,但同一时间内该音频只允许播放一个实例。建议较大的 BGM 音频使用流式加载。

待补充:动态加载(dy_load_list)配置说明、LRU 内存管理机制。

music_definitions.json ​

music_definitions.json 用于指定特定游戏场景下自动播放的背景音乐。

json
{
  "creative": {
    "event_name": "music.game.creative",
    "min_delay": 60,
    "max_delay": 180
  }
}

支持的场景键名 ​

键名含义
creative创造模式
game常规游戏
menu主菜单
nether下界
end末地
endboss末影龙
water水下
credits终末之诗

待补充:完整的场景键名列表。

说明

event_name 对应 sound_definitions.json 中定义的音效键名。场景键名由 MC 游戏固定,不支持自定义。

音效分类(category) ​

category 字段控制音效的分类,影响玩家在设置中的音量调节:

分类说明
music音乐
ui界面音效
weather天气音效
block方块音效
hostile敌对生物音效
neutral中性生物音效

待补充:完整分类列表与自定义分类支持情况。

音效触发 ​

游戏中音效的触发方式包括:

  • 自动触发:通过 music_definitions.json 配置场景自动播放
  • 指令触发:使用 /music 指令或 /playsound 指令
  • 数据驱动:在实体或方块的 JSON 中配置音效事件

待补充:各触发方式的详细用法与优先级。

脚本播放音效 ​

通过 ModSDK 的 customAudio 组件接口可以精确控制音效播放:

接口说明
DisableOriginMusic屏蔽原生音乐
PlayGlobalCustomMusic播放全局自定义 BGM(优先级最高)
PlayCustomMusic在指定位置播放音效(3D 效果)

待补充:各接口参数说明与代码示例。

完整示例 ​

待补充:一个包含自定义 BGM 替换和位置音效播放的完整 Mod 示例,参考 customMusicDemo。

下一步 ​