Unity5 音效一

来源:互联网 发布:淘宝led灯外发加工真假 编辑:程序博客网 时间:2024/05/21 03:29

Unity5 音效一

一、Unity 支持音效格式
下图为Unity目前所支持的音效格式
这里写图片描述

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

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

这里写图片描述

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

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

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

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

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

这里写图片描述

选中 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 的距离变化,听到的音量变化曲线
这里写图片描述

这里写图片描述

(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<AudioSource>();        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 释放音效

0 0
原创粉丝点击