Godot游戏引擎学习 第八课
增加音乐和音效
其实原理差不多,之前学习制作金币的时候当时是添加过音效的,不过当时用的是AnimationPlayer
来实现,通过方法轨道调用AudioStreamPlayer
的play
方法来播放音乐。
我刚开始的时候准备不去跟着UP的视频,自己动手来做的。但是自己脑抽了折腾了好久不弄不成功,而且最后莫名奇妙的发现游戏里Slime不见了...,音乐也没播放成功
我起码检查了二十分钟发现原来是当时我写Slime的动画的时候头来的walk状态没给export属性赋值,导致动画自动播放后这些属性直接变为死亡后的状态了,恰好里面更改过Visible属性,导致精灵直接消失不见了。
不过后来思路理清楚了倒是很快就做了,这里就不细说了,都是之前的东西。
另外还增加了场景BGM后因为角色死了我们调用了场景重置函数,所以这里UP说了一个场景树的概念,我们的主场景为Wolrd,只要一重置整个场景树就会恢复成初始化状态,如果想要实现BGM在角色死掉的时候不断掉就要重新添加一个额外的和World同级的节点。
这里就要用到项目 > 项目设置 > 自动加载
这个功能,就是把一个场景单独加载成一个和主场景同级的节点。这样我们重置主场景就不会影响到这个节点了。
增加音量开关
然后增加了一个音量、音效的开关实现,音量应该也是同理的。
我们可以在编辑器下方开到一个音频标签,这里面就是我们管理所有游戏声音的地方,点开后可以看到只有一个默认的Master总线,所有的总线通过合成后都会通过Master播放出来。
在AudioStreamPlayer的属性面板通过更改Bus即可更改音频通过那个总线播放。
所以我们增加一个BGM的总线,一个SFX的总线,然后通过代码监听按键来控制开关即可。
代码部分:
extends Node
func _input(event):
var sfx_id = 2
if event.is_action_pressed("ui_cancel"):
AudioServer.set_bus_mute(sfx_id, !AudioServer.is_bus_mute(sfx_id))
角色死亡动画
添加方式其实和怪物的一样,都是通过AnimationPlayer来调用音频播放即可。这里修改了一点角色死亡的判断逻辑,代码如下:
# ...
func _on_Hurtbox_hurt():
velocity.y = -jump_force
animation_palyer.play("death")
yield(animation_palyer, "animation_finished")
get_tree().reload_current_scene()
# ...
# ...
# 每一帧都会执行这个函数
func _process(delta):
# 跳跃
velocity.y += gravity * delta
if is_dead:
return
# ...
转场动画
UP这节课讲的是利用ColorRect
和AnimationPlayer
做的一个简单的渐变转场,因为转场是全局的所以我们添加在之前增加的Globals场景上面。
节点结构和动画设置如下如下:
在编写一个场景reload函数方便调用:
# ...
func reload_world():
# 死亡的时候让动画倒叙播放
animation_player.play_backwards("fadein")
# 等待动画播放完毕
yield(animation_player, "animation_finished")
# 重置场景
get_tree().reload_current_scene()
# 动画正序播放
animation_player.play("fadein")
# ...
# ...
# 角色受到伤害
func _on_Hurtbox_hurt():
# 往上蹦跶一下,然后播放死亡动画
velocity.y = -jump_force
animation_palyer.play("death")
# 等待动画播放完毕
# 外部加载的场景都可以通过名称直接调用,调用写好的函数重置场景
Globals.reload_world()
# ...
最终效果
像模像样了,明天就是最后一颗,这个教程还在更新,作者说准备这周不出新教程,鸽一周。我准备尝试着自己写两个关卡实现机关之类的功能。
加入评论