找回密码
 立即注册
查看: 328|回复: 0

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

[复制链接]
发表于 2022-1-11 09:32 | 显示全部楼层 |阅读模式
https://www.bilibili.com/video/BV1zE411R7fF
由于过多的AudioSource加载在player上很累赘,这里使用脚本进行音频调用
场景新建SoundManager空物体,并为其新建SoundManager脚本
player身上的AudioSource删掉,脚本的音效调用注释掉
在SoundManager定义一个audioSource
  1. public AudioSource audioSource;
复制代码
用于调用音源,在定义多个clip存放音效
  1. public AudioClip cherryAudio, hurtAudio, jumpAudio;
复制代码
接着定义一个公开的函数,用于被调用的jumpAudio
暂停讲解旧的方法:
  1.     public void JumpAudio()
  2.     {
  3.         audioSource.clip = jumpAudio;//替换音源
  4.         audioSource.Play();//音频播放
  5.     }
复制代码
在player调用该音频函数的脚本:
  1. void jump()
  2. {
  3.     SoundManager soundManager = gameObject.GetComponent<SoundManager>();
  4.     SoundManager.JumpAudio();
  5. }
复制代码
但该方法比较麻烦,所以麦扣提出使用静态类的方法:05:38
在SoundManager脚本内,先将SoundManager这个类进行原地实例化
这样就能通过这个实体进行访问这个类的全部函数
  1.     public static SoundManager instance;//把类实例化为instance
  2.     private void Awake()
  3.     {
  4.         instance = this;
  5.     }
复制代码
然后在player脚本添加调用语句:SoundManager.instance.JumpAudio();即可调用
  1.     void newJump()
  2.     {
  3.         if (isGround)
  4.         {
  5.             extraJump = 1;
  6.         }
  7.         if(Input.GetKeyDown(KeyCode.U) && extraJump > 0)
  8.         {
  9.             rb.velocity = Vector2.up * jumpforce;//这里相当于 = new Vector2 (0 , 1) * jumpforce
  10.             extraJump--;
  11.             SoundManager.instance.JumpAudio();//<<===============
  12.             anim.SetBool("jumping", true);
  13.         }
  14.     }
复制代码
接着受伤和樱桃代码,下面是SoundManager全部
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class SoundManager : MonoBehaviour
  5. {
  6.     public static SoundManager instance;
  7.     public AudioSource audioSource;
  8.     [SerializeField]
  9.     private AudioClip cherryAudio, hurtAudio, jumpAudio;
  10.     private void Awake()
  11.     {
  12.         instance = this;
  13.     }
  14.     public void JumpAudio()
  15.     {
  16.         audioSource.clip = jumpAudio;
  17.         audioSource.Play();
  18.     }
  19.     public void HurtAudio()
  20.     {
  21.         audioSource.clip = hurtAudio;
  22.         audioSource.Play();
  23.     }
  24.     public void CherryAudio()
  25.     {
  26.         audioSource.clip = cherryAudio;
  27.         audioSource.Play();
  28.     }
  29. }
复制代码
自行添加樱桃和受伤时player脚本的调用代码
最后给SoundManager添加一个audiosource放入BGM即可
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-15 00:47 , Processed in 0.133309 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表