Unity5 音效一

Unity5 音效一

一、Unity 支持音效格式
下图为Unity目前所支持的音效格式
Unity5 音效一_第1张图片

常用的为 .mp3, .ogg, .wav
.wav 适用于较短的音效
.mp3 适用于较长的音效
.ogg 适用于较长的音效

下面以一个 .mp3 音效拖到Project 下,然后选中该音效,在Inspector面板显示其属性

Unity5 音效一_第2张图片

Load Type:
DecompressOnLoad : 音效文件加载后为解压缩状态,好处是耗费CPU少。

CompressedInMemory :音效文件在内存中保持压缩状态,占用内存少,但是耗费CPU,当使用该音效时首先要CPU对其进行解压,然后才能使用。

Streaming : 当播放该音效时,从磁盘以流的形式加载音效数据,好处,占用内存最少,因为只有很少的缓冲数据占用内存。

二、播放音效
首先确认场景中有且只有一个对象挂载了 Audio Listerer 组件(一般摄像机上默认挂载一个)。

然后创建一个对象,添加 AudioSource 组件,将音效拖拽到 AudioClip 参数上,如下图

Unity5 音效一_第3张图片

选中 Play On Awake(开始即播放)

运行游戏,即可听到播放的音效

下面先介绍一些 AudioSource 的一些常用参数

(1)Output 音效混合器
(2)Play On Awake 运行开始立即播放
(3)Loop 是否循环播放
(4)Priority 播放优先权(0 - 255),数值越小,优先级别越高
(5)Volume 播放音量
(6)Pitch 音高,默认为 1,大于1时提高音高,并且会加快播放速度,小于1,降低音高,减慢播放速度,但是数值偏离 1越大,越偏离原始声音
(7)Stereo Pan 立体声,默认为 0,当值为 -1时,只有左声道响,当值为 1时,只有右声道有声音
(8)Spatial Blend 当值为 0时为 2D音效,当值为 1 时为 3D音效
(9)Volume Rolloff 即随着和AudioLister 的距离变化,听到的音量变化曲线
Unity5 音效一_第4张图片

Unity5 音效一_第5张图片

(10)in Distance 当距离超过该数值时,声音开始衰减
(11) Max Distance 当距离超过该数值时,音量衰减为 0

三、通过代码控制播放以及上面所有参数的控制
一般不会使用直接将 音效拖拽到 AudioSource 的AudioClip参数上,因为那样做不利于管理,并且它会在 对象生成的时候立即加载音效到内存,并且不会释放。音效过多或是音效过大时相当耗费内存。
所以要对音效进行动态加载

下面为了省事,直接从Resources 下加载音效了

创建脚本 PlayAudio.CS 将其拖拽到需要播放音效的对象上

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

//如果添加该脚本的对象上没有挂载 AudioSource组件,将自动添加该组件
[RequireComponent(typeof(AudioSource))]
public class PlayAudio : MonoBehaviour {

    private AudioSource _audioSources;

    public AudioMixerGroup _audioMixerGroup;
    // Use this for initialization
    void Start () {
        _audioSources = GetComponent();

        if (_audioSources == null)
        {
            Debug.LogWarning("audioSources is null");
            return;
        }

        if (_audioMixerGroup != null)
            _audioSources.outputAudioMixerGroup = _audioMixerGroup; // 设置音效混合器

        AudioClip audioClip = Resources.Load("AA") as AudioClip;

        if (audioClip == null)
        {
            Debug.LogWarning("audioClip is null");
            return;
        }

        _audioSources.clip = audioClip;     //动态添加音效
        _audioSources.playOnAwake = false;   //运行开始立即播放
        _audioSources.loop = true;          //设置循环播放
        _audioSources.priority = 128;       //设置优先权
        _audioSources.volume = 1;           //设置音量大小为 1
        _audioSources.pitch = 1;            //设置音高为 1 
        _audioSources.spatialBlend = 0;     //设置音效为 2D 音效
        _audioSources.minDistance = 1;      //设置最小开始衰减距离
        _audioSources.maxDistance = 100;    //设置最大能听到音量距离
        //设置音量衰减类型为线性衰减
        _audioSources.rolloffMode = AudioRolloffMode.Linear; 
    }

    private float currentSecond = 0; //记录当前播放到了第几秒
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.A))
        {
            if (_audioSources != null)
            {
                //设置从第几秒的位置开始播放
                _audioSources.time = currentSecond; 
                _audioSources.Play();
            }
        }

        if (Input.GetKeyDown(KeyCode.D))
        {
            //判断是否为空,是否正在播放
            if (_audioSources != null && _audioSources.isPlaying) 
            {
                currentSecond = _audioSources.time;
                _audioSources.Pause();
            }
        }

        if (Input.GetKeyDown(KeyCode.W))
        {
             //判断是否为空,是否正在播放
            if (_audioSources != null && _audioSources.isPlaying)
            {
                _audioSources.Pause();

                AudioClip audioClip = _audioSources.clip;
                _audioSources.clip = null;

                Resources.UnloadAsset(audioClip);
            }  }
    }
}

运行点击 A 播放,D暂停,W 释放音效

你可能感兴趣的:(Unity)