赞
踩
注:本篇为本人的学习笔记,所以有的地方估计只有本人能看懂,详情见b站up:Michael-studio
版本信息:unity2020.3
本节内容:
Audio Listener:相当于人的耳朵,默认情况下在main camera中
Audio Source:相当于发出声音的东西,一般谁发出声音给谁
Audio Clips:相当于音乐片段
默认情况下在main camera中,默认状态是开启的
可以在Add Component中添加
添加后 :在AudioClip行选择你想要的音源片段(自己找资源
注意几个选项:
1.Play on awake——开始游戏时即开始播放
2.Loop——循环播放
3.Volume——音量、
4.Pitch——节奏,比如节奏比较慢可以变快(向右
比如在敌人被消灭时,播放消灭音频
在玩家起跳时,播放起跳音频
受伤时,播放受伤的音效
首先第一步肯定还是要给发出这个声音的物体添加Audio Source,然后将音频资源赋值
然后,点掉Play On Awake 和Loop(这个很容易忘记,用代码决定何时播放
播放起来也非常简单,在你需要的地方写下代码
deathAudio.Play();
BUT一定要注意播放顺序,比如某个物体这样写,这声音是播不出来的,因为刚调用就被Destroy了
- deathAudio.Play();
- Destroy(gameObject);
当然了,在这之前,deathAudio要被赋值
deathAudio=GetComponent<AudioSource>();
BUT,一个发生物体既有跳跃声音又有毁灭声音,只添加一个Audio source肯定不够,这时候就要根据需要添加多个Audio source(但如果非常多岂不是很恶心?有没有更好的方法呢?
AudioSouce还有很多方法,可以看一看unity官网文档,常用的一些如下
播放:Play——Audio.Play();其实应该是Audio.Play(0);
暂停:Pause——Audio.Pause();
停止:Stop——Audio.Stop();
当一个物体需要多个音源的时候,就需要挂载多个Audio Source组件,这样非常容易乱,也不好管理。如下图
其实只需要一个Audio Souce用于扬声即可,需要什么音效,就用这个扬声器放哪个音效
所以结构可以简化为一个脚本(控制该放哪个Clip),一个扬声器
脚本如下:里面有一些内容需要注意
- public class SoundManager : MonoBehaviour
- {
- public static SoundManager instance;//生成静态的实例,占用栈区空间,不可多用
-
- public AudioSource audioSource;
- [SerializeField]
- private AudioClip jump,hurt,cherry;
-
- public void JumpAudio()
- {
- audioSource.clip=jump;
- audioSource.Play();
- }
-
- private void Awake()
- {
- instance=this;
- }
-
- public void HurtAudio()
- {
- audioSource.clip=hurt;
- audioSource.Play();
- }
-
- public void CherryAudio()
- {
- audioSource.clip=cherry;
- audioSource.Play();
- }
- }
首先是这几行:也就是赋值所需的扬声器和声音片段的,其中需要特别说一下的是“ [SerializeField]”它可以让private也显示在inspector中
- public AudioSource audioSource;
- [SerializeField]
- private AudioClip jump,hurt,cherry;
将所需要的组件赋值
然后是如何控制扬声器播放哪个Clip,通用做法就是这两行代码
- audioSource.clip=jump;
- audioSource.Play();
最后,这些函数都可能在别的脚本中调用,为了方便,将该类实例化(但是你得确保你这个游戏只有一个SoundManager)用以下几行代码实现
- public static SoundManager instance;//生成静态的实例,占用栈区空间,不可多用
-
-
- private void Awake()
- {
- instance=this;//调用该脚本的时候,就将类中的静态实例赋值为当前的类实例
- }
实现之后在别的脚本中调用就可以写作
SoundManager.instance.JumpAudio();
像BGM这种一直在播放的音乐,可以再挂一个Audiosource,那些暂时的音效都可以写入这个脚本中,就会方便许多!!
一个小技巧(与本章内容无关——批量更改某个变量名
vscode批量修改指定变量名或函数名
1、全选目标变量名或函数名
光标左击选中某个变量,然后CTRL+Shift+L 选中所有的目标变量
2、替换
CTRL+F打开查找窗口,将窗口变成replace模式,下面第二行填入要替换成的名称。
右边的两个图标分别代表单一代替(配合上面的左右箭头使用)和全部代替
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。