【Unity 框架】QFramework v1.0 使用指南 工具篇:07. AudioKit 音频管理解决方案 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
基本使用
AudioKit 音频播放相关的功能如下:
- 播放背景音乐,同一时间只能播放一个音乐,播放别的音乐会直接卸载掉正在播放的音乐。
- 播放音效,同一时间可以播放多个音效,当多人说话时,也可以用来播放人声。
- 播放人声,与播放背景音乐一致,同一时间只能播放一个人声,用于播放一些旁白之类的声音非常适合。
对应的 API 调用方式如下:
btnPlayGame.onClick.AddListener(() => { AudioKit.PlayMusic("resources://game_bg"); });
btnPlaySound.onClick.AddListener(() => { AudioKit.PlaySound("resources://game_bg"); });
btnPlayVoiceA.onClick.AddListener(() => { AudioKit.PlayVoice("resources://game_bg"); });
AudioKit 设置相关的功能如下:
- 背景音乐开关
- 音效开关
- 人声开关
调用示例如下:
btnSoundOn.onClick.AddListener(() => { AudioKit.Settings.IsSoundOn.Value = true; });
btnSoundOff.onClick.AddListener(() => { AudioKit.Settings.IsSoundOn.Value = false; });
btnMusicOn.onClick.AddListener(() => { AudioKit.Settings.IsMusicOn.Value = true; });
btnMusicOff.onClick.AddListener(() => { AudioKit.Settings.IsMusicOn.Value = false; });
btnVoiceOn.onClick.AddListener(() => { AudioKit.Settings.IsVoiceOn.Value = true; });
btnVoiceOff.onClick.AddListener(() => { AudioKit.Settings.IsVoiceOn.Value = false; });
这是打开声音这个功能的使用方式。
调整音量大小的代码如下:
AudioKit.Settings.MusicVolume.RegisterWithInitValue(v => musicVolumeSlider.value = v);
AudioKit.Settings.VoiceVolume.RegisterWithInitValue(v => voiceVolumeSlider.value = v);
AudioKit.Settings.SoundVolume.RegisterWithInitValue(v => soundVolumeSlider.value = v);
musicVolumeSlider.onValueChanged.AddListener(v => { AudioKit.Settings.MusicVolume.Value = v; });
voiceVolumeSlider.onValueChanged.AddListener(v => { AudioKit.Settings.VoiceVolume.Value = v; });
soundVolumeSlider.onValueChanged.AddListener(v => { AudioKit.Settings.SoundVolume.Value = v; });
如何自定义音频加载
与 UIKit 一样, AudioKit 也支持了自定义音频加载的方式。
参考代码如下:
using System;
using UnityEngine;
namespace QFramework.Example
{
public class CustomAudioLoaderExample : MonoBehaviour
{
/// <summary>
/// 定义从 Resources 加载音频
/// </summary>
class ResourcesAudioLoaderPool : AbstractAudioLoaderPool
{
protected override IAudioLoader CreateLoader()
{
return new ResourcesAudioLoader();
}
}
class ResourcesAudioLoader : IAudioLoader
{
private AudioClip mClip;
public AudioClip Clip => mClip;
public AudioClip LoadClip(AudioSearchKeys panelSearchKeys)
{
mClip = Resources.Load<AudioClip>(panelSearchKeys.AssetName);
return mClip;
}
public void LoadClipAsync(AudioSearchKeys audioSearchKeys, Action<bool,AudioClip> onLoad)
{
var resourceRequest = Resources.LoadAsync<AudioClip>(audioSearchKeys.AssetName);
resourceRequest.completed += operation =>
{
var clip = resourceRequest.asset as AudioClip;
onLoad(clip, clip);
};
}
public void Unload()
{
Resources.UnloadAsset(mClip);
}
}
void Start()
{
// 启动时需要调用一次
AudioKit.Config.AudioLoaderPool = new ResourcesAudioLoaderPool();
}
}
}
由于 QFramework 中的 AudioKit 默认是通过 ResKit 加载,所以使用自定义加载方式时,请将项目中如下代码注释掉:
public class AudioKitWithResKitInit
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
public static void Init()
{
AudioKit.Config.AudioLoaderPool = new ResKitAudioLoaderPool();
}
}
关于 AudioKit 就介绍到这。
更多内容
- 转载请注明地址:liangxiegame.com (首发) 微信公众号:凉鞋的笔记
- QFramework 主页:qframework.cn
- QFramework 交流群: 623597263
- QFramework Github 地址: https://github.com/liangxiegame/qframework
- QFramework Gitee 地址:https://gitee.com/liangxiegame/QFramework
- GamePix 独立游戏学院 & Unity 进阶小班地址:https://www.gamepixedu.com/