素材巴巴 > 程序开发 >

Unity --- 音频组件与脚本控制方法

程序开发 2023-09-13 13:43:33

1.在游戏中声音一般分为两类,一种是音乐一种是音效

2.我们可以直接从桌面中将mp3文件拖到unity的assests文件夹里

3.在Unity中如果我们想在游戏中听到声音,那就必须有一个组件存在,这个组件就是Audio lisetener --- 音频监听器,然后一个游戏程序中只能有一个音频监听器组件

4.在Unity中,创建项目的时候默认创建的游戏物体Main Camara中就自带了音频监听器组件,如下图

5.挂载了Audio lisetener组件的游戏物体就是我们用来监听声音的游戏物体

 1.有听声音的自然也有播放声音的,如果我们想某个游戏物体播放声音的话,我们需要给这个游戏物体挂载一个组件 --- Audio Souce

 从上到下分别是:AudioClip(音频片段),输出,静音,绕过效果,绕过监听器效果,绕过混响区域,唤醒时播放,循环,优先级,音量,音调,立体声音,空间混合,混响区混音


1.AudioClip(音频片段)

在Affects文件夹下的每一个音频文件都是一个音频片段,在这个选项中我们可以选择一个音频片段给Audio Source播放

把音频片段传给AudioClip后,Audio Source中剩下的选项都是在对我们传进来的这个音频片段进行参数调整和调整


2.play on awake

如果勾选了的话,这个Audio Source就会在游戏开始的时候播放传给它的音频片段

如果勾了循环的话,则会循环播放音频片段


3.点开3DsoundSetting之后可以来到一个次级面板

 从上到小分别是:多普勒级别,扩张,音量衰减(它里面那个选项是对数衰减),最小距离,最大距离(这个是用来调整模拟现实中声音在3d空间的起点向无限远处的衰减 --- 多普勒效应)

 我们给游戏物体加上Audio Source之后,游戏会分别被两个圆罩住

在离物体近的小圆中,我们听到声音一直处于最大音量,这个小圆的半径是可调的,调节它的参数是Min Distance

然后还有一个离物体很远的大球(中间的小白点就是我们上面的那个立方体)

 只有在这个大球里我们才能够听到声音,且如果在这个大球里小球外的话,离物体越远声音越小,然后大球的半径也是能够控制的,由参数 Max Distance来控制


除了在这个组件面板中控制声音的播放以外,我们还可以通过脚本来控制声音的播放

那么如何通过脚本来控制播放呢?

1.创建一个脚本,并把脚本挂载到具有Audio Source组件的游戏物体上(创建这个脚本的目的就是为了通过这个脚本控制这个Audio Source组件)

2.在脚本中声明一个声音片段对象来指向我们要播放的声音片段

声明好后,我们就可以回到游戏物体的 inspector 面版中的脚本处,会发现多了个这个

 我们把要播放的音频片段文件拖到这里来,就能够实现对我们创建的音频片段对象的赋值

3.声明一个Audio Source组件对象来指向我们要操作的音频组件

 获取当前游戏物体播放器组件的方式:

获取到组件之后将组件赋值给对应的组件对象

 4.有了音频片段和组件对象后,我们可以设定组件要播放的音频片段了

设定方法:通过组件对象调用clip属性后将要播放的音频对象赋值给它 

 第一个是进行循环操作(loop属性置为ture时开始循环,置为false时循环停止),第二个是调节音量参数 

 调用play方法,让组件对象开始播放音频片段


小功能实现:如何实现按空格切换声音的播放和暂停呢?

由于这里涉及到了读取用户按键操作,所以我们要在updata方法中实现,保证从游戏开始时就每帧扫描一次输入缓存区,无论用户何时输入都能够获取用户的输入数据

 pause方法 --- 暂停 ; unpause方法 --- 中止暂停,继续播放

 要注意停止方法和暂停方法的处理逻辑是不一样的!!!

对于暂停方法来说是在当前播放进度暂停,然后结束暂停的时候会从我们暂停的进度那继续播放

对于停止方法来说则是直接结束播放,下一次再播放的话又是从头开始播放了


如何实现按一次键播放一次声音呢(从头到尾播放的那种)--- 由于要获取用户输入所以依然要在updata方法中实现

向playOneShot方法的括号中传入要播放的音频片段对象后,通过音频组件对象调用playOneShot方法后,对应音频组件就会播放一次音频片段


标签:

上一篇: Angular8 执行npm i 报错问题解决 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。