当前位置: 首页 > article >正文

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)。
    • 播放指定音效。
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();
        }
    }

    
}

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

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

PlayerAnimationTriggers.cs

添加了攻击触发的音效

AudioManager.instance.PlaySFX(2);//播放音效
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();
    }
}


http://www.kler.cn/a/416729.html

相关文章:

  • 理解Linux的select、poll 和 epoll:从原理到应用场景
  • AMD的AI芯片Instinct系列介绍
  • STM32 ADC --- 知识点总结
  • Linux -初识 与基础指令1
  • Django 路由层
  • 初窥 HTTP 缓存
  • 2023年MathorCup高校数学建模挑战赛—大数据竞赛A题基于计算机视觉的坑洼道路检测和识别求解全过程文档及程序
  • Lodash的debounce方法:优化你的函数调用
  • llamafactory微调
  • 电子资料管理系统ImageUpload存在任意文件上传致RCE漏洞
  • 【Leetcode 每日一题 - 补卡】3235. 判断矩形的两个角落是否可达
  • PHP如何在MongoDB中使用正则表达式进行查询
  • GY302光照传感器模块详解
  • PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕
  • Kafka AdminClient API 来获取特定 Kafka 消费组的消费延迟
  • 基于特征子空间的高维异常检测:一种高效且可解释的方法
  • ASP.net WebAPI 上传图片实例(保存显示随机文件名)
  • 时频转换 | Matlab基于垂直二阶同步压缩变换vertical second-order synchrosqueezing一维数据转二维图像方法
  • 微服务篇-微服务保护:使用 Sentinel 来实现请求限流、线程隔离、服务熔断和 Fallback 备用方案的使用
  • 终端环境下关闭显示器
  • 基于AutoEncode自编码器的端到端无线通信系统matlab误码率仿真
  • Keil Debug 添加变量监视
  • 【北京迅为】iTOP-4412全能版使用手册-第二十章 搭建和测试NFS服务器
  • Figma入门-自动布局
  • Springboot组合SpringSecurity安全插件基于密码的验证Demo
  • 目标检测,图像分割,超分辨率重建