Unity --- 音频组件与脚本控制方法
Posted Metallic Cat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity --- 音频组件与脚本控制方法相关的知识,希望对你有一定的参考价值。
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方法后,对应音频组件就会播放一次音频片段
Unity音频控制(暂停停止播放)
AudioSource组件
在摄像头的属性面板中的Audio Listener,如果开启3D音效声音大小是相对于摄像机而言的。
所有游戏设计中都可以使用此方法
设置音乐、音效相关内容步骤:
(1)创建一个空物体Empty命名为Audio
(2)将Audio拖拽至MainCamera上,并且将Audio的坐标改为(0,0,0)
(3)拷入相关的音效
(4)将音效拖拽至Audio物体的Audio Source属性中的AudioClip上
注:勾选了Play On Awake时表明从开始就播放音乐(在没有代码干预的情况下)
Loop则是指循环的意思
(5)音量调节在属性面板的Volume中进行更改。
(6)创建脚本AudioOrange (防止名字重复)完成脚本内容
脚本代码即解析如下:
public class AudioOrange : MonoBehaviour
AudioSource Orange;//获取AudioOrange组件
public AudioClip audio1;
public AudioClip auido2;//申请两个变量来为点击使释放不同的音效
void Start()
Orange = transform.GetComponent<AudioSource>();//完成组件的获取,为AudioOrange赋值
当变量名相同是可以将它们重叠在一起
比如,可将代码改为:public AudioClip audio1,audio2;这样可以节省空间
(7)完成了音乐的放置,现在要将相关音效播放出来,完成代码如下:
void Update()
if (Input.GetKeyDown(KeyCode.Q)) //在这里进行一个Input,如果按下Q键时,调用Audio11方法
Audio11();//调用第一个方法
if (Input.GetKeyDown(KeyCode.E)) //在这里进行一个Input,如果按下E键时,播放第一个声音
Audio22();//调用第一个方法
void Audio11()//防止名字相冲突
Orange.clip = audio1;//让Audio11这个方法等于预先设定好的Audio1
Orange.Play();
void Audio22()//防止名字相冲突
Orange.clip = audio2;//让Audio11这个方法等于预先设定好的Audio1
Orange.Play();
(8)取消AudioClip中的音乐和Loop以及从开始就播放(上方备注)
完整代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioOrange : MonoBehaviour
AudioSource Orange;//获取AudioOrange组件
public AudioClip audio1;
public AudioClip audio2;//申请两个变量来为点击使释放不同的音效
void Start()
Orange = transform.GetComponent<AudioSource>();//完成组件的获取,为AudioOrange赋值
void Update()
if (Input.GetKeyDown(KeyCode.Q)) //在这里进行一个Input,如果按下Q键时,调用Audio11方法
Audio11();//调用第一个方法
if (Input.GetKeyDown(KeyCode.E)) //在这里进行一个Input,如果按下E键时,播放第一个声音
Audio22();//调用第一个方法
void Audio11()//防止名字相冲突
Orange.clip = audio1;//让Audio11这个方法等于预先设定好的Audio1
Orange.Play();
void Audio22()//防止名字相冲突
Orange.clip = audio2;//让Audio11这个方法等于预先设定好的Audio1
Orange.Play();
播放停止暂停
(1)创建一个新的脚本AudioApple,第一仍然是获取Orange组件再进行赋值。
代码如下:
public class AudioApple : MonoBehaviour
AudioSource Orange;//获取AudioOrange组件
void Start()
Orange = transform.GetComponent<AudioSource>();//对Orange组件进行赋值
(2)将需要的音效重新拖拽至AudioClip中,并且勾选Play On Awake和Loop
完整代码展示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioApple : MonoBehaviour
AudioSource Orange;//获取AudioOrange组件
void Start()
Orange = transform.GetComponent<AudioSource>();//对Orange组件进行赋值
void Update()
if (Input.GetKeyDown(KeyCode.R))
Orange.Stop();//当按下R键,音乐停止,点击U时重头开始播放音乐
if (Input.GetKeyDown(KeyCode.T))
Orange.Pause();//当按下T键,音乐暂停
if (Input.GetKeyDown(KeyCode.U))
Orange.Play();//当按下U键,音乐继续播放
注明:所有音乐文档需要放到属性面板中合适的位置。
————————————————
版权声明:本文为CSDN博主「qq_42610450」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42610450/article/details/106899662
以上是关于Unity --- 音频组件与脚本控制方法的主要内容,如果未能解决你的问题,请参考以下文章
unity3d study ---- 麦子学院---------- unity3d常用组件及分析 ---------- 代码控制音频视频