Creator3.1 简易音频控制类

新手第一次分享代码,希望能有人一起讨论改进,让我从中也得到些经验 :smiley:

由于3.1改动了很多音频相关的api,导致音频的功能于以往不同,而这一点甚至没有体现在任何文档中!!!结果我只能翻了很久的源码才看出一点端倪:现在AudioClip仅仅代表音频资源,而AudioSource则包含AudioPlayer用于实现真正的音频播放。在此更新中,原来的end事件也无法使用了。虽然音频有current属性可以发明查询播放时间,但是在播放结束后current会直接回复至0也导致实现效果不太理想。我用一个AudioDecrator继承AudioSource来使用内部的onEnded事件接口。

整个声音系统功能在3.1只有直接的播放,在游戏工程中音频控制就变的比较复杂,都需要自己手动实现。我写了一个AudioChannel抽象类并继承实现了ExclusiveChannel,LoopChannel,MixChannel,QueueChannel这4种音频控制的模式,简单来说只需要在调用实例的play(AudioDecrator)方法即可让其依不同行为播放音频。

audioChannel.zip (6.9 KB)

playInstantly方法在每个子类中都表示立即强制播放
ExclusiveChannel下同时只允许播放一个音频,否则会失败;
MixChannel会像没有管理一样同时播放任意音频,唯一的作用是在调节音量时所有会音频一起按比例变化;
QueueChannel表示按顺序播放音频;
LoopChannel表示一个循环播放音频的队列,行为比较复杂,play(新音频)在当前有播放时会将新音频放置于下一位,playInstantly则会插队将当前音频放在下一个。该channel还有add方法将新音频置于最后一个。而且loop还可以添加播放间隔。

3d音频如何实现

我水平不高,creator3.1看起来似乎是完全没有这方面内容的,也许旧的版本或者外部插件可以实现?

修复了一个严重的bug :face_with_thermometer:
audioChannel.zip (6.9 KB)