unity2D:音效Audio&音效管理SoundManager

注:本篇为本人的学习笔记,所以有的地方估计只有本人能看懂,详情见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了

        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();

更多方法详情见unity官网

音效管理SoundManager

当一个物体需要多个音源的时候,就需要挂载多个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模式,下面第二行填入要替换成的名称。
右边的两个图标分别代表单一代替(配合上面的左右箭头使用)和全部代替

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Karon_NeverAlone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值