diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..60797cc --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,15 @@ +[gd_resource type="AudioBusLayout" format=2] + +[resource] +bus/1/name = "BGM" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = 0.0 +bus/1/send = "Master" +bus/2/name = "SFX" +bus/2/solo = false +bus/2/mute = false +bus/2/bypass_fx = false +bus/2/volume_db = 0.0 +bus/2/send = "Master" diff --git a/prefab/role/Player.tscn b/prefab/role/Player.tscn index abab257..41d150d 100644 --- a/prefab/role/Player.tscn +++ b/prefab/role/Player.tscn @@ -8,3 +8,6 @@ collision_layer = 8 script = ExtResource( 2 ) GunPrefab = ExtResource( 4 ) + +[node name="AnimatedSprite" parent="." index="0"] +frame = 3 diff --git a/resource/sound/bgm/Intro.ogg b/resource/sound/bgm/Intro.ogg new file mode 100644 index 0000000..bffdec1 --- /dev/null +++ b/resource/sound/bgm/Intro.ogg Binary files differ diff --git a/resource/sound/bgm/Intro.ogg.import b/resource/sound/bgm/Intro.ogg.import new file mode 100644 index 0000000..40e9321 --- /dev/null +++ b/resource/sound/bgm/Intro.ogg.import @@ -0,0 +1,15 @@ +[remap] + +importer="ogg_vorbis" +type="AudioStreamOGGVorbis" +path="res://.import/Intro.ogg-058563f71fb5fd982135a064e68ee173.oggstr" + +[deps] + +source_file="res://resource/sound/bgm/Intro.ogg" +dest_files=[ "res://.import/Intro.ogg-058563f71fb5fd982135a064e68ee173.oggstr" ] + +[params] + +loop=true +loop_offset=0 diff --git a/resource/sound/sfx/ordinaryBullet.ogg b/resource/sound/sfx/ordinaryBullet.ogg new file mode 100644 index 0000000..f5a886a --- /dev/null +++ b/resource/sound/sfx/ordinaryBullet.ogg Binary files differ diff --git a/resource/sound/sfx/ordinaryBullet.ogg.import b/resource/sound/sfx/ordinaryBullet.ogg.import new file mode 100644 index 0000000..365ebbc --- /dev/null +++ b/resource/sound/sfx/ordinaryBullet.ogg.import @@ -0,0 +1,15 @@ +[remap] + +importer="ogg_vorbis" +type="AudioStreamOGGVorbis" +path="res://.import/ordinaryBullet.ogg-cfe42761de70631705f4e117ce06ad61.oggstr" + +[deps] + +source_file="res://resource/sound/sfx/ordinaryBullet.ogg" +dest_files=[ "res://.import/ordinaryBullet.ogg-cfe42761de70631705f4e117ce06ad61.oggstr" ] + +[params] + +loop=false +loop_offset=0 diff --git a/src/manager/SoundManager.cs b/src/manager/SoundManager.cs index f8641d5..2cf4f34 100644 --- a/src/manager/SoundManager.cs +++ b/src/manager/SoundManager.cs @@ -1,7 +1,17 @@ +using System; using Godot; /// -/// 声音管理 背景音乐管理 音效在特定位置 处理 +/// 音频总线 区分不同的声音 添加声音效果 目前只有背景音乐 和音效 两个bus +/// +public enum BUS +{ + BGM = 0, + SFX = 1 +} + +/// +/// 声音管理 背景音乐管理 音效 /// public class SoundManager { @@ -12,5 +22,63 @@ internal static SoundManager singleTon = new SoundManager(); } - private AudioStreamPlayer audioStreamPlayer = new AudioStreamPlayer(); + private static AudioStreamPlayer audioStreamPlayer = new AudioStreamPlayer(); + + + /// + /// 背景音乐路径 + /// + public static string BGMPath = "res://resource/sound/bgm/"; + /// + /// 音效路径 + /// + public static string SFXPath = "res://resource/sound/sfx/"; + + /// + /// 播放声音 用于bgm + /// + /// bgm名字 在resource/sound/bgm/目录下 + /// 需要播放声音得节点 将成为音频播放节点的父节点 + /// 音量 + public static void PlayeMusic(string soundName, Node node, float volume) + { + AudioStream sound = ResourceManager.Load(BGMPath + soundName); + if (sound != null) + { + AudioStreamPlayer soundNode = new AudioStreamPlayer(); + node.AddChild(soundNode); + soundNode.Stream = sound; + soundNode.Bus = Enum.GetName(typeof(BUS), 0); + soundNode.VolumeDb = volume; + soundNode.Play(); + } + else + { + GD.Print("没有这个资源!!!"); + } + } + /// + /// 添加并播放音效 用于音效 + /// + /// 音效文件名字 在resource/sound/sfx/目录下 + /// 需要播放声音得节点 将成为音频播放节点的父节点 + /// 音量 + public static void PlaySoundEffect(string soundName, Node node, float volume = 0f) + { + AudioStream sound = ResourceManager.Load(SFXPath + soundName); + if (sound != null) + { + AudioStreamPlayer soundNode = new AudioStreamPlayer(); + node.AddChild(soundNode); + soundNode.Stream = sound; + soundNode.Bus = Enum.GetName(typeof(BUS), 1); + soundNode.VolumeDb = volume; + soundNode.Play(); + GD.Print("bus:", soundNode.Bus); + } + else + { + GD.Print("没有这个资源!!!"); + } + } } \ No newline at end of file diff --git a/src/room/RoomManager.cs b/src/room/RoomManager.cs index 0f28e4a..ff65623 100644 --- a/src/room/RoomManager.cs +++ b/src/room/RoomManager.cs @@ -1,3 +1,4 @@ +using System; using Godot; /// @@ -33,10 +34,15 @@ //初始化地图 var node = GetNode("MapRoot").GetChild(0).GetNode("Config"); - Color color = (Color) node.GetMeta("ClearColor"); + Color color = (Color)node.GetMeta("ClearColor"); VisualServer.SetDefaultClearColor(color); } + public override void _Ready() + { + SoundManager.PlayeMusic("intro.ogg", this, -17f); + } + public override void _Process(float delta) { if (Input.IsActionJustPressed("fire")) diff --git a/src/weapon/bullet/OrdinaryBullets.cs b/src/weapon/bullet/OrdinaryBullets.cs index 7d1e121..7e65b85 100644 --- a/src/weapon/bullet/OrdinaryBullets.cs +++ b/src/weapon/bullet/OrdinaryBullets.cs @@ -1,3 +1,4 @@ +using System; using Godot; /// @@ -55,6 +56,12 @@ AddChild(ShadowSprite); } + public override void _Ready() + { + //生成时播放音效 + SoundManager.PlaySoundEffect("ordinaryBullet.ogg", this, 6f); + } + public override void _PhysicsProcess(float delta) { if (frame++ == 0)