Unity iOS静音播放声音技巧,音效管理

Unity5 音效一



一、Unity 支持音效格式

下图为Unity目前所支持的音效格式

unity ios 静音播放声音 unity 播放音效_拖拽

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

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

unity ios 静音播放声音 unity 播放音效_unity_02

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

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

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

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

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

unity ios 静音播放声音 unity 播放音效_加载_03

选中 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 的距离变化,听到的音量变化曲线

unity ios 静音播放声音 unity 播放音效_拖拽_04

unity ios 静音播放声音 unity 播放音效_加载_05

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

             

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空