我是新手,在大家的帮助下,把音频组件写出来了,现在是能用,但是不知道是不是可以更好一些。反正跑起来了,知其然不知其所以然。
1.我用的是YooAsset 加载音频,就是猫大写的组件LoadAssetAsync
:
AudioClip audioClip = await self.resourcesLoaderComponent.LoadAssetAsync<AudioClip>(audioClipName);
我搜索到的信息说,YooAsset是会缓存加载的数据,那么我是否还要再给音频做一层“池”?
public Dictionary<string, AudioClip> audioClips = new Dictionary<string, AudioClip>();
2.我需要知道YooAsset是否加载指定的音频成功,因为音频可能不存在,如果加载不成功,则不应该进行下一步的播放,或者使用备选的音频。这一步应该如何判断?
public static async void Cache(this AudioManagerComponent self, string audioClipName ) {
if ( !self.audioClips.ContainsKey( audioClipName ) ) {
AudioClip audioClip = await self.resourcesLoaderComponent.LoadAssetAsync<AudioClip>(audioClipName);
if (audioClip) {
self.audioClips.Add( audioClip.name, audioClip );
}
}
}
3.结合前边的代码,我想把加载结果传递到下边代码里,但是始终没成功。没找到猫大预设的方法。还有个疑问,我在Awake里先缓存音频到池子里,然后点击按钮播放声音切换UI。如果我注释掉缓存这一步,那么第一次切换UI时不会播放音效,返回再次点击时候,才会播放音效。再者,如果是一段很长的背景音乐,在Awake里缓存一下,是否好一些,异步加载音乐不会卡进度。我没有实战过,不知道单独一曲的加载时间,有必要节省么,要先缓存么?比如切进战场,可能各种音效 多种背景音乐。
private static void Awake(this SettingPanelComponent self)
{
self.audioManagerComponent = self.Root().GetComponent<AudioManagerComponent>() ;
self.audioManagerComponent.Cache(ButtonAudioType.
SettingCloseButton
);
}