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 释放音效