|
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即可 |
|