【Unity程序技巧】2D音乐中心管理器

news2024/9/27 17:32:10

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

🅰️



文章目录

    • 🅰️
    • 前言
    • 🎶(==W==) 涉及知识点
    • 🎶(==W==) 2D音乐中心管理器
        • 1.知识点
        • 2.特色
        • 测试脚本
    • 🅰️


前言


🎶(W 涉及知识点


  • List泛型类
    在这里插入图片描述

🎶(W 2D音乐中心管理器


1.知识点

在这里插入图片描述

2.特色

  • 统一管理项目中的音乐音效
    在这里插入图片描述


public class MusicManager : SingleManager<MusicManager>
{
 
    private AudioSource bgMusic = null;   //背景音乐一般是一个

    private float bgValue = 1;  //音乐大小

    private GameObject soundObj = null;  //音效依附的父对象

    private List<AudioSource> soundList = new List<AudioSource>();  //音效列表
 
    private float soundValue = 1;   //音效大小

    public MusicManager()
    {
        UpdateManager .GetInstance().AddUpdateListener(MyUpdate); //添加到帧更新的·生命周期函数中
    }

    private void MyUpdate()
    {
        for( int i = soundList.Count - 1; i >=0; --i )
        {
            if(!soundList[i].isPlaying)
            {
                GameObject.Destroy(soundList[i]);
                soundList.RemoveAt(i);
            }
        }
    }

    //----------------------------------------音乐部分--------------------------------------------

    // 播放背景音乐
    public void PlayBkMusic(string name)
    {
        if(bgMusic == null)
        {
            GameObject obj = new GameObject("BgMusic"); //直接命名
            
            bgMusic = obj.AddComponent<AudioSource>();
        }
        //异步加载背景音乐 
        ResourceManager.GetInstance().LoadAsync<AudioClip>("音乐路径" + name, (clip) =>
        {
            bgMusic.clip = clip;
            bgMusic.loop = true;
            bgMusic.volume = bgValue;
            bgMusic.Play();
        });

    }

    // 暂停背景音乐
    public void PauseBgMusic()
    {
        if (bgMusic == null)
            return;
        bgMusic.Pause();
    }

// 停止背景音乐

    public void StopBgMusic()
    {
        if (bgMusic == null)
            return;
        bgMusic.Stop();
    }

    // 改变背景音乐 音量大小
    public void ChangeBKValue(float v)
    {
        bgValue = v;
        if (bgMusic == null)
            return;
        bgMusic.volume = bgValue;
    }

    //--------------------------------------音效部分----------------------------------------


    // 播放音效
   
    public void PlaySound(string name, bool isLoop, UnityAction<AudioSource> callBack = null)//回调下一个音效前要将它置空          
    {
        if(soundObj == null)
        {
            soundObj = new GameObject("Sound");
          
        }
        //   //音效资源异步加载 也可以在缓存池中加载(适用于频繁使用音效的时候)
        ResourceManager .GetInstance().LoadAsync<AudioClip>("音效路径" + name, (clip) =>
        {
            AudioSource source = soundObj.AddComponent<AudioSource>();
            source.clip = clip;
            source.loop = isLoop;
            source.volume = soundValue;
            source.Play();
            soundList.Add(source);
            if(callBack != null)
                callBack(source);
        });
    }


    // 改变所有音效声音大小

    public void ChangeSoundValue( float value )
    {
        soundValue = value;
        for (int i = 0; i < soundList.Count; ++i)
            soundList[i].volume = value;
    }


    // 停止音效

    public void StopSound(AudioSource source)
    {
        if( soundList.Contains(source) )
        {
            soundList.Remove(source);
            source.Stop();
            GameObject.Destroy(source);
        }
    }
}

测试脚本

  • 主要测试音效方法中的委托功能
   AudioSource source;
        MusicManager.GetInstance().PlaySound("as",true , (clip) => {
            source = clip;
            MusicManager.GetInstance().StopSound(source);
        }  );
       

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MII,RMII,GMII,RGMII区别

一、MII,GMII为百兆网口 1.MII ①引脚接线图 ②引脚定义 2.GMII ①引脚接线图 ②引脚定义 二、GMII,RGMII为千兆网口 1.GMII ①GMII引脚接线图 ②GMII引脚定义 2.RGMII ①RGMII引脚接线图 ②RGMII引脚定义 三、PCB走线注意 ① RGMII 模式下&#xff0c;MAC 的 RXD0&a…

WireShark使用入门

背景 Wireshark&#xff0c;又被称为网络封包分析软件&#xff0c;是一种开源且功能十分强大的工具。该工具的主要功能是截取各种网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料。它使用WinPCAP作为接口&#xff0c;直接与网卡进行数据报文交换。 Wireshark支持W…

简单有效的方法压缩图片大小,尝试一键自动压缩!

如果图片过大&#xff0c;会占据我们过多的存储空间&#xff0c;可能会引起电脑的卡顿&#xff0c;传输的速度很慢&#xff0c;也很容易传输失败&#xff0c;这时候可以把图片压缩&#xff08;https://www.yasuotu.com/&#xff09;一下&#xff0c;那么怎么才能快速压缩图片大…

【Note】完全二叉树的类型定义

完全二叉树 完全二叉树&#xff1a;深度为k&#xff0c;结点数为n的二叉树&#xff0c;如果其结点1~n的位置序号分别与等高的满二叉树的结点1~n的位置序列一一对应&#xff0c;则为完全二叉树。 完全二叉树的特点&#xff1a; 叶子结点只可能出现在最后两层。度为1的结点个数…

关于c语言,你必须了解的运行流程

流程图 1.程序的翻译环境和执行环境 在ANSIC任何一种实现下,都存在两种环境,程序的翻译环境和执行环境 翻译环境:将源代码转换成机器指令 执行环境:用于执行代码 2.详解编译链接 简单的说一个代码从编写到看到控制台的结果分为编译链接两步即可,接下来我们将详细解释编译链接中…

6 STM32标准库函数 之 内部集成电路(I2C) 所有函数的介绍及使用

6 STM32标准库函数 之 内部集成电路&#xff08;I2C&#xff09;所有函数的介绍及使用 1. 图片有格式2 文字无格式六 库函数之内部集成电路&#xff08;I2C&#xff09;所有函数的介绍及使用前言一、图片预览&#xff0c;无格式&#xff08;CSDN&#xff09;二、 I2C库函数固件…

(链表) 25. K 个一组翻转链表 ——【Leetcode每日一题】

❓ 25. K 个一组翻转链表 难度&#xff1a;困难 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保…

Python-股票市场用于算法交易的人类反馈强化学习 (RLHF)

ChatGPT 的成功使人类反馈强化学习 (RLHF) 技术成为人们关注的焦点。RLHF 是一种机器学习方法,它结合了强化学习 (RL) 和人类反馈 (HF) 来改进学习过程。这篇文章将使您对 RLHF 有一个全面的了解。它描述了 RLHF 在算法交易(algo transactions)中的应用,并提供了可执行的 P…

TLSF内存管理算法原理详解

TLSF算法原理概述 TLSF算法的核心优势在于其通过位运算执行内存块匹配算法&#xff0c;并兼顾了内存管理的额外内存消耗&#xff0c;无论是从内存池申请内存块还是释放内存块回内存池其操作都是O(1)。TLSF组织了一张一二级索引表映射其所有管理内存块的闲忙状态&#xff0c;并通…

简单聊下Redis的主从复制和哨兵机制以及集群(面试题)

ChatGPT的简答&#xff1a; Redis的主从复制&#xff08;Master-Slave Replication&#xff09;是指将一个Redis服务器的数据复制到其他Redis服务器的过程&#xff0c;其中一个服务器作为主节点&#xff08;Master&#xff09;&#xff0c;而其他服务器作为从节点&#xff08;S…

基于SSM的居家养老系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

快速学习如何注册域名企业邮箱,只需5分钟

网站最重要的一个东西&#xff0c;就是你要有一个域名邮箱&#xff0c;显得你的邮箱更加专业&#xff0c;怎么样去申请一个域名邮箱&#xff0c;之前也出过一些内容给过大家&#xff0c;很多方法已经过时了&#xff0c;今天给大家更新一个最新版的&#xff0c;怎么样去申请一个…

【C++代码】安排行程,N皇后,解数独--代码随想录

题目&#xff1a;重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必…

6、实现多段运动【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍用控制步进电机三个主要参数角度、速度、方向&#xff0c;实现简单的步进电机多段控制 一、目标功能 输入多个目标角度&#xff0c;以及每个角度对应的速度&#xff0c;实现步进电机的多段多速度转动 二、计算过程 2.1 简化C与n函数关系 根据上一节内…

Go基础——基础语法

1、简介 Go&#xff08;又称Golang&#xff09;是Google开发的一种静态强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的编程语言。语法类似于C&#xff0c;专为高性能和并发程序而设计。通常用于网络编程、云服务器、游戏服务器、DevOps、Web应用、分布式系统、容器虚…

[AutoSAR系列] 1.3 AutoSar 架构

依AutoSAR及经验辛苦整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入浅出AutoSAR》 1. 整体架构 ​ 图片来源&#xff1a; AutoSar 官网 从官往图中可以看出autosar作为汽车ECU软件架构&#xff0c;是通过分层来实现软硬件隔离。就像大多数操作系统一样&#xff…

Linux系统编程_线程:线程、互斥量、条件变量

1. 线程概述&#xff08;与进程的区别及线程的优势&#xff09;&#xff08;437.1&#xff09; Linux多线程编程初探 https://www.cnblogs.com/xiehongfeng100/p/4620852.html 进程与线程 典型的 UNIX/Linux 进程可以看成只有一个控制线程&#xff1a;一个进程在同一时刻只做…

低概率Bug,研发敷衍说复现不到

测试工作中&#xff0c;经常会遇到一些低概率出现的问题&#xff0c;如果再是个严重问题&#xff0c;那测试人员的压力无疑是很大的&#xff0c;一方面是因为低概率难以复现&#xff0c;另一面则是来自项目组的压力。 如何在测试时减少此类问题的重复投入&#xff0c;我的思考如…

I/O设备的概念和分类,I/O控制器

文章目录 1.什么是I/O设备2.按使用特性分类1.人机交互类外部设备2.存储设备3.网络通信设备 3.按传输速率分类1.低速设备:2.中速设备:3.高速设备: 4.按信息交换的单位分类1.块设备:2.字符设备: 5.I/O设备的机械部件6.I/O设备的电子部件&#xff08;I/O控制器&#xff09;1.接收和…

Python实现双目标定、畸变矫正、立体矫正

一&#xff0c;双目标定、畸变矫正、立体矫正的作用 双目目标定&#xff1a; 3D重建和测距&#xff1a;通过双目目标定&#xff0c;您可以确定两个摄像头之间的相对位置和朝向&#xff0c;从而能够根据视差信息计算物体的深度&#xff0c;进行三维重建和测距。姿态估计&#xf…