Files
netease-modsdk-wiki/docs/mconline/10-addon教程/第07章:自定义生物/课程07.绑定动画音效及动画控制器音效.md
boybook 760c2dd9ad 2.6
2025-12-01 20:59:16 +08:00

127 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/7_2.d721173b.jpg
hard: 进阶
time: 20分钟
---
# 绑定动画音效及动画控制器音效
#### 作者:境界
音效是可以提升游戏沉浸感、真实感的一种方法。在游戏里,玩家除了能够听到背景音乐、环境音乐,每种生物也都有自己的专属声音。例如羊吃草,蜜蜂嗡嗡嗡。一种生物如果在每个行为表现上都有自己的音效,会让玩家觉得生物更加生动。因此,本章将会教给开发者如何通过动画和动画控制器来给生物添加上音效。
![](./images/7_01.png)
原版的音效可以在RP/sounds中找到由于MC原版音效使用的是商业音效引擎FMOD正常情况下是无法试听音效。但开发者可以在同目录下的sound_definitions.json文件中找到音效的资源名称和资源路径。通过一定的比较提取出适合的音效作为练习绑定生物音效的素材。
![](./images/7_1.jpg)
1打开Blockbench导入原版猪的模型和贴图。
2点击动画模式新建一个动画。
3点击动画动画效果打开动画特效面板。
4在效果栏列插入帧同时在左侧关键帧文字下方效果输入在生物定义文件中定义好的音效名称。
![](./images/7_2.jpg)
5进入游戏测试音效播放情况。
6保存好动画文件可以看到在动画格式中新增了一个sound_effects对象内容是时间差和它对应的值值内包含着音效效果的名称将新建的动画在生物定义文件中定义好后若动画配置正确游戏内音效就会正常播放了。
```
{
"format_version":"1.8.0",
"animations":{
"animation.pig.particle":{
"sound_effects":{
"0.0":{
"effect": “smoke”
}
}
}
}
}
```
7在Blockbench当中一帧内只能添加一种音效效果。若需要同时播放好几种音效效果则需要将音效效果对象改为音效效果数组再手动填入每一个音效对象。
如:
```
{
"format_version":"1.8.0",
"animations":{
"animation.pig.particle":{
"sound_effects":{
"0.0":[
{
"effect":"jiliguala"
},
{
"effect":"yiyiyaya"
}
]
}
}
}
}
```
与绑定动画音效相比,动画控制器音效可能更为简单。在每个状态下新建一个音效效果集合,即"sound_effects",它同样可以同时添加多种音效效果。
```
{
"format_version":"1.10.0",
"animation_controllers":{
"controller.animation.blaze.flame":{
"initial_state":"default",
"states":{
"default":{
"transitions":[
{
"flaming":"query.is_charged"
}
]
},
"flaming":{
"sound_effects":[
{
"effect":"balabala"
}
],
"particle_effects":[
{
"effect":"charged_flames"
}
],
"transitions":[
{
"default":"!query.is_charged"
}
]
}
}
}
}
}
```
与绑定动画音效不同的是,当动画控制器切换到带有音效效果的状态时,音效会在第一时间播放,并且播放结束后就不会重新播放。若音效绑定在动画内并且动画被设置为循环开启,则音效会在指定的时间间隔不断重复播放,直到动画结束为止。