Unity教程2D入门:29音效管理SoundManager

https://www.bilibili.com/video/BV1zE411R7fF

由于过多的AudioSource加载在player上很累赘,这里使用脚本进行音频调用

场景新建SoundManager空物体,并为其新建SoundManager脚本

player身上的AudioSource删掉,脚本的音效调用注释掉

在SoundManager定义一个audioSource

public AudioSource audioSource;

用于调用音源,在定义多个clip存放音效

public AudioClip cherryAudio, hurtAudio, jumpAudio;

接着定义一个公开的函数,用于被调用的jumpAudio

暂停讲解旧的方法:

    public void JumpAudio()
    {
        audioSource.clip = jumpAudio;//替换音源
        audioSource.Play();//音频播放
    }

在player调用该音频函数的脚本:

void jump()
{
    SoundManager soundManager = gameObject.GetComponent<SoundManager>();
    SoundManager.JumpAudio();
}

                                                                                                                                                

但该方法比较麻烦,所以麦扣提出使用静态类的方法:05:38

在SoundManager脚本内,先将SoundManager这个类进行原地实例化

这样就能通过这个实体进行访问这个类的全部函数

    public static SoundManager instance;//把类实例化为instance
    private void Awake()
    {
        instance = this;
    }

然后在player脚本添加调用语句:SoundManager.instance.JumpAudio();即可调用

    void newJump()
    {
        if (isGround)
        {
            extraJump = 1;
        }
        if(Input.GetKeyDown(KeyCode.U) && extraJump > 0)
        {
            rb.velocity = Vector2.up * jumpforce;//这里相当于 = new Vector2 (0 , 1) * jumpforce
            extraJump--;
            SoundManager.instance.JumpAudio();//<<===============
            anim.SetBool("jumping", true);
        }
    }

接着受伤和樱桃代码,下面是SoundManager全部

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SoundManager : MonoBehaviour
{
    public static SoundManager instance;
    public AudioSource audioSource;
    [SerializeField]
    private AudioClip cherryAudio, hurtAudio, jumpAudio;

    private void Awake()
    {
        instance = this;
    }
    public void JumpAudio()
    {
        audioSource.clip = jumpAudio;
        audioSource.Play();
    }
    public void HurtAudio()
    {
        audioSource.clip = hurtAudio;
        audioSource.Play();
    }
    public void CherryAudio()
    {
        audioSource.clip = cherryAudio;
        audioSource.Play();
    }
}

自行添加樱桃和受伤时player脚本的调用代码

最后给SoundManager添加一个audiosource放入BGM即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值