当前位置:   article > 正文

unity2D:音效Audio&音效管理SoundManager_unity中播放音效clip为什么会实例化出来

unity中播放音效clip为什么会实例化出来

注:本篇为本人的学习笔记,所以有的地方估计只有本人能看懂,详情见b站up:Michael-studio

版本信息:unity2020.3

本节内容:

Audio Listener:相当于人的耳朵,默认情况下在main camera中

Audio Source:相当于发出声音的东西,一般谁发出声音给谁

Audio Clips:相当于音乐片段

Audio Listener

默认情况下在main camera中,默认状态是开启的

Audio Source

可以在Add Component中添加

 添加后 :在AudioClip行选择你想要的音源片段(自己找资源

注意几个选项:

1.Play on awake——开始游戏时即开始播放

2.Loop——循环播放

3.Volume——音量、

4.Pitch——节奏,比如节奏比较慢可以变快(向右

在特定情况下播放的Audio

比如在敌人被消灭时,播放消灭音频

在玩家起跳时,播放起跳音频

受伤时,播放受伤的音效

首先第一步肯定还是要给发出这个声音的物体添加Audio Source,然后将音频资源赋值

然后点掉Play On Awake 和Loop(这个很容易忘记,用代码决定何时播放

播放起来也非常简单,在你需要的地方写下代码

deathAudio.Play();

BUT一定要注意播放顺序,比如某个物体这样写,这声音是播不出来的,因为刚调用就被Destroy了

  1. deathAudio.Play();
  2. 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();

更多方法详情见unity官网

音效管理SoundManager

当一个物体需要多个音源的时候,就需要挂载多个Audio Source组件,这样非常容易乱,也不好管理。如下图

其实只需要一个Audio Souce用于扬声即可,需要什么音效,就用这个扬声器放哪个音效

所以结构可以简化为一个脚本(控制该放哪个Clip),一个扬声器

脚本如下:里面有一些内容需要注意

  1. public class SoundManager : MonoBehaviour
  2. {
  3. public static SoundManager instance;//生成静态的实例,占用栈区空间,不可多用
  4. public AudioSource audioSource;
  5. [SerializeField]
  6. private AudioClip jump,hurt,cherry;
  7. public void JumpAudio()
  8. {
  9. audioSource.clip=jump;
  10. audioSource.Play();
  11. }
  12. private void Awake()
  13. {
  14. instance=this;
  15. }
  16. public void HurtAudio()
  17. {
  18. audioSource.clip=hurt;
  19. audioSource.Play();
  20. }
  21. public void CherryAudio()
  22. {
  23. audioSource.clip=cherry;
  24. audioSource.Play();
  25. }
  26. }

 首先是这几行:也就是赋值所需的扬声器和声音片段的,其中需要特别说一下的是“  [SerializeField]”它可以让private也显示在inspector中

  1. public AudioSource audioSource;
  2. [SerializeField]
  3. private AudioClip jump,hurt,cherry;

将所需要的组件赋值

然后是如何控制扬声器播放哪个Clip,通用做法就是这两行代码

  1. audioSource.clip=jump;
  2. audioSource.Play();

最后,这些函数都可能在别的脚本中调用,为了方便,将该类实例化(但是你得确保你这个游戏只有一个SoundManager)用以下几行代码实现

  1. public static SoundManager instance;//生成静态的实例,占用栈区空间,不可多用
  2. private void Awake()
  3. {
  4. instance=this;//调用该脚本的时候,就将类中的静态实例赋值为当前的类实例
  5. }

 实现之后在别的脚本中调用就可以写作

SoundManager.instance.JumpAudio();

像BGM这种一直在播放的音乐,可以再挂一个Audiosource,那些暂时的音效都可以写入这个脚本中,就会方便许多!!

一个小技巧(与本章内容无关——批量更改某个变量名

vscode批量修改指定变量名或函数名

1、全选目标变量名或函数名

光标左击选中某个变量,然后CTRL+Shift+L 选中所有的目标变量


2、替换

CTRL+F打开查找窗口,将窗口变成replace模式,下面第二行填入要替换成的名称。
右边的两个图标分别代表单一代替(配合上面的左右箭头使用)和全部代替

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/810977
推荐阅读
相关标签
  

闽ICP备14008679号