Unity声音系统

游戏声音系统组成

音频片段(Audio Clip):

当选中导入的声音之后,你便可以在右侧属性面板中看到关于这个文件的一些属性。
在这里插入图片描述

声音源(Audio Source):

发出这个声音的声音源。

  • 当把声音挂在一个游戏物体身上,这个游戏物体就拥有了Audio Source组件。
    在这里插入图片描述

声音模式(空间混合):

  • 2d模式:在场景中,无论在什么位置,声音的大小都不会发生变化。
  • 3d模式:在场景中,音源发出的声音会如同现实生活中一样,当你距离音源的距离不同的时候,声音会发生变化,如:距离远了,声音听起来就变小了。

音频衰减:
在这里插入图片描述

你也可以设置音乐衰减的方式,和自定义衰减曲线。

声音监听器(Audio Listener):

声音的监听者。在游戏中是摄像机用来放我们的监听器。
一般位于我们的Main Camera 上面,用来监听游戏场景中所有的音乐和音效。一个场景中只能拥有一个。

音频混音器(Audio Mixer):

作用:

1.用来给声音添加效果,如:高频,低频等。
2.用来管理项目中的音乐和音效。

如何创建

在项目面板右键->创建->音频混合器。
双击音频混合器即可进行管理。
在这里插入图片描述

主要分为左右两个部分:
左侧栏目:是对项目中的音频进行管理。

  • 快照:用来保存音频的参数,可以设置很多个快照用来保存不同的参数。
  • 组:就是可以设置不同的层级关系,用来进行管理。

右侧栏目:是对音轨进行管理。可以添加一些音效,如:混响。

  • 其中S是单独播放这一个轨道。M是静音。B是消除当前轨道上面的所有效果。

注意:

  1. 在游戏模式下进行更改,其更改也会保留。

混音器与Audio Source进行连接:
在下图位置进行设置链接:
在这里插入图片描述

支持的声音文件格式

主流的声音文件格式Unity都支持,如常见的mp3.

导入声音文件

可以直接拖入文件到你用来放置声音文件的收藏夹。

声音系统代码

声音数据结构

在项目中创建一个AudioType的C#脚本文件,用来存放与声音有关的组件和方便调节声音。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

[System.Serializable]   //序列化 让数据类型可以展示在检测视图上面
public class AudioType 
{
    public AudioSource Source;  //声音源
    public AudioClip Clip;  //声音片段
    public AudioMixerGroup Group; //声音混音器
    

    public string  Name;  //音乐名

    [Range(0f,1f)]   //使得音量大小是以条的形式进行调节
    public float Volume;  //音量大小
    [Range(0.1f,5f)]  //同理 条进行调节
    public float Pitch;  //音高
    public bool Loop;  //是否循环播放

}

这代代码的作用便是,当游戏中创建一个空物体,然后在这个物体身上挂在AudioManager脚本,这个脚本会创建AudioType的对象,这时候,在右侧面板中便可以控制声音源,声音大小,等等参数。
在这里插入图片描述

声音管理

创建一个AudioManager的C#脚本,并将其设置为一个单例。

设置为单例的目的:希望AudioManager是一个公开的,类似于静态的对象,为了方便在其他地方非常方便的调用AudioManager,然后使用里面的一些方法,例如:Play(),比如Stop()来暂停我们的音乐。

使用AudioManager.cs来管理声音组件,定义一些函数方便外部使用。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AudioManager : MonoBehaviour
{
    /// <summary>
    /// 获得AudioManager的实例
    /// </summary>
    public static AudioManager instance;
    public AudioType [] AudioTypes;
    private void Awake(){
        if(instance==null)
        {
            instance=this;
        }else{
            Destroy(gameObject);   //如果为空则删除这个物体
            return;
        }
        DontDestroyOnLoad(instance);  //在场景切换的时候不会将物体进行摧毁
    }

    private void Start(){
        foreach(AudioType type in AudioTypes){
            type.Source = gameObject.AddComponent<AudioSource>();

            type.Source.clip = type.Clip;
            type.Source.name = type.Name;
            type.Source.volume = type.Volume;
            type.Source.pitch = type.Pitch;
            type.Source.loop = type.Loop;

            if (type.Group != null)
            {
                type.Source.outputAudioMixerGroup = type.Group;
            }
        }
    }

    //播放音乐函数
    public void Play(string name)
    {
        //如果找到这个音乐则开始播放
        foreach(AudioType type in AudioTypes) 
        {
            if(type.Name == name)
            {
                type.Source.Play();
                return;
            }
        }
        Debug.LogWarning("没有找到" + name + "音频!");
    }
    //暂停音乐播放
    public void Pause(string name)
    {
        foreach(AudioType type in AudioTypes) 
        {  
            if(type.Name == name) 
            {
            type.Source.Pause(); 
                return;
            } 
        }
        Debug.LogWarning("没有找到" + name + "音频!");
    }
}

在外部调用AudioManager的Play()播放函数:

AudioManager.instance.Play();

参考资料

【游戏开发】Unity音频系统从入门到精通系列课程 | 第一期 | 主线篇_哔哩哔哩_bilibili

  • 29
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

charon桐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值