Unity类银河战士恶魔城学习总结(P153 Audio Manager音频)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/

本章节添加了循环播放的BGM,并且给武器攻击加上了音效

音频管理器

AudioManager.cs

1. 类的功能

  • 核心目标 :管理游戏中的音频播放,包括:
    • 播放和停止 音效(SFX)
    • 播放、停止或随机播放 背景音乐(BGM)
  • 单例模式 :确保在场景中只有一个 AudioManager 实例。

2. 核心逻辑

Awake()
  • 确保单例模式:
    • 如果已有一个 AudioManager 实例,则销毁新创建的实例,避免重复。
    • 如果没有实例,则将当前实例设为唯一实例。
Update()
  • 每帧检查 playBgm
    • 如果 playBgmfalse,停止所有背景音乐。
    • 如果 playBgmtrue 且当前音乐未播放,则播放指定的背景音乐。
PlaySFX(int _sfxIndex)
  • 播放指定索引的音效:
    • 随机调整音调(pitch),让音效有更多变化感(范围:0.851.15)。
    • 播放指定音效。
cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AudioManager : MonoBehaviour
{
    public static AudioManager instance;

    [SerializeField] private AudioSource[] sfx;//音效
    [SerializeField] private AudioSource[] bgm;//背景音乐


    public bool playBgm;
    private int bgmIndex;


    private void Awake()
    {
        if(instance != null)
            Destroy(instance.gameObject);
        else
            instance = this;
    }


    private void Update()
    {
        if (!playBgm)
            StopAllBGM();
        else
        {
            if(!bgm[bgmIndex].isPlaying)//如果背景音乐没有播放
                PlayBGM(bgmIndex);
        }
    }


    public void PlaySFX(int _sfxIndex)//播放音效
    {
        if (_sfxIndex < sfx.Length)
        {
            sfx[_sfxIndex].pitch = Random.Range(.85f, 1.15f);//设置音效的音调
            sfx[_sfxIndex].Play();
        }
    }

    public void StopSFX(int _index) => sfx[_index].Stop();//停止音效


    public void PlayRandomBGM()//播放随机背景音乐
    {
        bgmIndex = Random.Range(0, bgm.Length);
        PlayBGM(bgmIndex);
    }



    public void PlayBGM(int _bgmIndex)//播放背景音乐
    {
        bgmIndex = _bgmIndex;

        StopAllBGM();
        bgm[bgmIndex].Play();
    }


    public void StopAllBGM()
    {
        for (int i = 0; i < bgm.Length; i++)
        {
            bgm[i].Stop();
        }
    }

    
}

为了防止听相同的音效听腻,所以加上了随机音调的效果

cs 复制代码
sfx[_sfxIndex].pitch = Random.Range(.85f, 1.15f);//设置音效的音调

PlayerAnimationTriggers.cs

添加了攻击触发的音效

cs 复制代码
AudioManager.instance.PlaySFX(2);//播放音效
cs 复制代码
using UnityEngine;

public class PlayerAnimationTriggers : MonoBehaviour
{
    private Player player => GetComponentInParent<Player>();

    private void AnimationTrigger()
    {
        player.AnimationTrigger();
    }

    private void AttackTrigger()//攻击触发函数
    {
        AudioManager.instance.PlaySFX(2);//播放音效

        Collider2D[] colliders = Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius);//检测区域内的敌人

        foreach (var hit in colliders)//遍历检测到的对象
        {
            if (hit.GetComponent<Enemy>() != null)
            {
                EnemyStats _target = hit.GetComponent<EnemyStats>();//判断是否是敌人

                if (_target != null) //对敌人造成伤害
                    player.stats.DoDamage(_target);


                ItemData_Equipment weaponData = Inventory.instance.GetEquipment(EquipmentType.Weapon);

                if (weaponData != null)//应用武器特殊效果
                    weaponData.Effect(_target.transform);

            }
        }
    }


    private void ThrowSword()
    {
        SkillManager.instance.sword.CreateSword();
    }
}
相关推荐
Gain_chance11 分钟前
25-学习笔记尚硅谷数仓搭建-DIM层其余(优惠卷、活动、地区、营销坑位、营销渠道、日期)维度表建表语句、简单分析
数据仓库·笔记·学习
jtymyxmz19 分钟前
《Unity Shader》14.1 卡通风格的渲染
unity·游戏引擎
SunnyDays101120 分钟前
使用 C# 将 Excel XLSX 或 XLS 转换为 HTML:完整指南
c#·excel转html·xlsx转html·xls转html
时光追逐者21 分钟前
一款基于 .NET Avalonia 开源免费、快速、跨平台的图片查看器
c#·.net·图片查看器
深蓝海拓21 分钟前
海康 MV 相机几种Bayer RG像素格式的处理
笔记·python·qt·学习·pyqt
点点开心22 分钟前
攻防世界WEB(新手模式)2-5-web2
前端·学习·安全·web安全·网络安全
不吃橘子的橘猫22 分钟前
Verilog HDL基础(概念+模块)
开发语言·学习·算法·fpga开发·verilog
wdfk_prog28 分钟前
[Linux]学习笔记系列 -- [drivers][dma]dma-buf
linux·笔记·学习
晚霞的不甘31 分钟前
Flutter for OpenHarmony《智慧字典》英语学习模块代码深度解析:从数据模型到交互体验
前端·学习·flutter·搜索引擎·前端框架·交互
LYS_061839 分钟前
寒假学习(9)(C语言9+模数电9)
c语言·开发语言·学习