Unity Game FrameWork—模块使用—声音

官方说明:提供管理声音和声音组的功能,用户可以自定义一个声音的音量、是 2D 声音还是 3D 声音,甚至是直接绑定到某个实体上跟随实体移动。

混音器

如图,AudioMixer混音器Groups面板下的每一个物体都是一个group分组,每个group组的音量由其本身音量以及所有父层级分组的音量决定。
[图片]
如图,每个音频资源都添加了混音器下的group组。当前分组为0,我们可以理解为Master是主音量分组,可以控制整体调节所有分组的音量。Music、Sound、UISound则是二级分组,可分别调整UI按钮音量,背景音量,以及音效音量。主音量分组的调整会影响到其下二级分组的音量。
[图片]
我们先了解混音器的音量管理方式,这里以框架学习为主。

组件配置

组件需配置添加混音器
[图片]
混音器里的分组需要和sound组件的分组名称一一对应,如果不对应会找不到,找不到则使用Master分组。
[图片]
Sound Groups的属性如下:
AvoidBeingReplacedBySamePriority:声音组中的声音是否避免被同优先级声音替换
Mute:声音组是否静音
Volume:声音组音量
AgentHelperCount:声音代理辅助器数量
Sound Groups组里有一个AvoidBeingReplacedBySamePriority的属性,判断是否被同一优先级的声音替换,但是分组里面并没有优先级。
Demo中有三类声音,UI点击、游戏过程特效音、背景音。
[图片]
对应的有三张配表,其中特效音和UI音有优先级,背景音没有优先级
[图片]
在这里插入图片描述
在这里插入图片描述
接下来再看一下代码,SoundExtension类里面有三种调用不同声音类别的方法,背景音固定优先级给的64,其他两个则是根据读表获取。

public static int? PlayMusic(this SoundComponent soundComponent, int musicId, object userData = null)
{
    soundComponent.StopMusic();
    IDataTable<DRMusic> dtMusic = GameEntry.DataTable.GetDataTable<DRMusic>();
    DRMusic drMusic = dtMusic.GetDataRow(musicId);
    if (drMusic == null)
    {
        Log.Warning("Can not load music '{0}' from data table.", musicId.ToString());
        return null;
    }
    PlaySoundParams playSoundParams = PlaySoundParams.Create();
    playSoundParams.Priority = 64;
    playSoundParams.Loop = true;
    playSoundParams.VolumeInSoundGroup = 1f;
    playSoundParams.FadeInSeconds = FadeVolumeDuration;
    playSoundParams.SpatialBlend = 0f;
    s_MusicSerialId = soundComponent.PlaySound(AssetUtility.GetMusicAsset(drMusic.AssetName), "MusicT", Constant.AssetPriority.MusicAsset, playSoundParams, null, userData);
    return s_MusicSerialId;
}

调用接口

读表的方式参考数据表即可,下面看一下怎么播放声音、设置音量及相关的接口。
已下部分接口在SoundExtension扩展组件里面做了封装,部分是在SoundComponent里面,有特定需求可自己封装。
播放三种类型音乐:(记得需传入音乐ID)
播放背景音乐:GameEntry.Sound.PlayMusic(1);
播放特效音乐:GameEntry.Sound.PlaySound(m_AircraftData.DeadSoundId);
播放UI音乐:GameEntry.Sound.PlayUISound(uiSoundId);
停止音乐:
停止背景音乐:GameEntry.Sound.StopMusic();
通用停止音乐:GameEntry.Sound.StopSound(serialId);
设置音量:
GameEntry.Sound.SetVolume(“Sound”, volume);
获取音量:
GameEntry.Sound.GetVolume(“Sound”);
停止所有声音:
GameEntry.Sound.StopAllLoadedSounds(fadeOutSeconds);//声音淡出时间
GameEntry.Sound.StopAllLoadingSounds();
暂停:
GameEntry.Sound.PauseSound(serialId, fadeOutSeconds);
恢复:
GameEntry.Sound.ResumeSound(serialId, fadeOutSeconds);
静音:
GameEntry.Sound.Mute(soundGroupName, true);
是否静音:
GameEntry.Sound.IsMuted(soundGroupName);

猜你喜欢

转载自blog.csdn.net/qq_37619255/article/details/129876514