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;
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即可
页:
[1]