Unity坦克大战开发全流程——开始场景——音效数据逻辑

news2025/4/22 9:50:08

开始场景——音效数据逻辑

从这里开始到后面的三小节我们都将干一件很重要的事——数据存储,只有实现了数据存储才能在再次进入游戏时保持游戏数据不被丢失。

类图分析:数据管理类是一个大类,它其中关联了两个类(这两个类都是数据结构类,只存在字段):一个是音效数据类;另一个是排行榜数据类。其中的排行榜数据类又由排行榜单条数据类聚合而成,而数据管理类又会提供一系列函数给外部进行数据存储。

音效数据类

数据管理类

单例模式

初始化音效数据

当第一次进入游戏时对音效的初始化

先在MusicData脚本中加一个字段以判断是否是第一次加载数据

然后再在数据管理类中进行判断,如果是第一次,那就直接手动进行初始化。

每一次打开音乐设置面板,就要将其数据进行一次更新,在SettingPanel脚本中编写此逻辑。

更新数据的函数

重写虚函数

数据管理类中的成员方法

1.开关背景音乐

2.开关音效

3.改变背景音乐的大小

4.改变背景音效的大小

在SettingPanel中添加事件

 

直到当前MusicData、GameDataMgr、SettingPanel的代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MusicData 
{
    //是否开启背景音乐
    public bool isOpenBK;
    //是否开启音效
    public bool isOpenSound;
    //音乐大小
    public float bkValue;
    //音效大小
    public float soundValue;

    //是否是第一次进入游戏
    public bool notFirst;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameDataMgr 
{
    private static GameDataMgr instance = new GameDataMgr();
    public static GameDataMgr Instance
    {
        get { return instance; }
    }

    public MusicData musicData;
    

    private GameDataMgr()
    {
        //初始化数据
        musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData;
        rankData = PlayerPrefsDataMgr.Instance.LoadData(typeof(RankList), "Music") as RankList;

        //判断是否是第一次进入游戏,如果是第一次,那么就通过代码来手动初始化数据
        if (!musicData.notFirst)
        {
            musicData.notFirst = true;
            musicData.isOpenBK = true;
            musicData.isOpenSound = true;
            musicData.bkValue = 1;
            musicData.soundValue = 1;

            //储存数据
            PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
        }
    }

    //以下是提供给外部用于注册事件的函数

    //开关背景音乐
    public void OpenOrCloseBKMisic(bool isOpen)
    {
        musicData.isOpenBK = isOpen;
        BKMusic.Instance.ChangeOpen(isOpen);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");        
    }

    //开关音效
    public void OpenOrCloseSound(bool isOpen)
    {
        musicData.isOpenSound = isOpen;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //改变背景音乐的大小
    public void ChangeBKValue(float value)
    {
        musicData.bkValue = value;
        BKMusic.Instance.ChangeValue(value);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //改变背景音效的大小
    public void ChangeSoundValue(float value)
    {
        musicData.soundValue = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SettingPanel : BasePanel<SettingPanel>
{
    //关联的各按钮控件
    public CustomGUISlider sliderMusic;
    public CustomGUISlider sliderSound;

    public CustomGUIToggle toggleMusic;
    public CustomGUIToggle toggleSound;

    public CustomGUIButton btnExit;

    void Start()
    {
        //事件监听
        sliderMusic.changeValue += (value) => GameDataMgr.Instance.ChangeBKValue(value);
        
        sliderSound.changeValue += (value) => GameDataMgr.Instance.ChangeSoundValue(value);

        toggleMusic.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseBKMisic(value);

        toggleSound.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseSound(value);
        
        btnExit.clickEvent += () =>
        {
            HideMe();
            
            if (SceneManager.GetActiveScene().name == "BeginScene")
            {
                BeginPanle.Instance.ShowMe();
            }
        };

        HideMe();
    }

    //数据更新函数
    public void UpdatePanelInfo()
    {
        //获得musicData这个变量的信息
        MusicData data = GameDataMgr.Instance.musicData;

        //对自己的变量进行赋值
        sliderMusic.nowValue = data.bkValue;
        sliderSound.nowValue = data.soundValue;
        toggleMusic.isSel = data.isOpenBK;
        toggleSound.isSel = data.isOpenSound;

    }

    //重写虚函数
    public override void ShowMe()
    {
        base.ShowMe();
        //在每次显示面板时就要更新数据
        UpdatePanelInfo();
    }

    
}

 

 

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

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

相关文章

2023年终总结 —— 我和CSDN相遇的第一年之“技术学习和个人成长的回顾与展望”

​ ​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 &#x1f38a;对2023的总结与回顾&#x1f38a; &#x1f3c5;获奖记录 &#x1f4da;学…

test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking

拓展阅读 test 之 jmockit-01-overview jmockit-01-test 之 jmockit 入门使用案例 mockito-01-overview mockito 简介及入门使用 PowerMock Mock Server ChaosBlade-01-测试混沌工程平台整体介绍 jvm-sandbox 入门简介 wiremock WireMock是一个流行的开源工具&#xf…

蚂蚁实习一面面经

蚂蚁实习一面面经 希望可以帮助到大家 tcp建立连接为什么要三次握手&#xff1f; 三次握手的过程 注意&#xff1a;三次握手的最主要目的是保证连接是双工的&#xff0c;可靠更多的是通过重传机制来保证的 所谓三次握手&#xff0c;即建立TCP连接&#xff0c;需要客户端和…

Centos7部署Keepalived+lvs服务

IP规划&#xff1a; 服务器IP地址主服务器20.0.0.22/24从服务器20.0.0.24/24Web-120.0.0.26/24Web-220.0.0.27/24 一、主服务器安装部署keepalivedlvs服务 1、调整/proc响应参数 关闭Linux内核的重定向参数&#xff0c;因为LVS负载服务器和两个页面服务器需要共用一个VIP地…

力扣刷题记录(23)LeetCode:718、1143、1035

718. 最长重复子数组 要想到用一个二维数组dp去表示数组nums1和nums2的公共子数组的最大长度。其中二维数组的索引 i、j 分别表示nums1中[0,i-1]数组、nums2中[0,j-1]数组。如果满足nums1[i-1]nums2[j-1],那么dp[i][j]dp[i-1][j-1]1 class Solution { public:int findLength(v…

科技创新实验室数据管理优选:高效企业网盘推荐

科技创新实验室建设是国家加强科技创新基本能力建设的重要措施&#xff0c;企业网盘等高效办公工具的应用是保证科技创新实验室正常运行、提高科研项目团队合作效率的重要手段。 本文将介绍企业网盘Zoho WorkDrive提供的解决方案&#xff1a; 行业痛点1&#xff1a;分散的数据…

CentOS虚拟机硬盘管理

CentOS虚拟机硬盘管理 一、创建虚拟机时分配硬盘 创建虚拟机时&#xff0c;在下图这个页面需要重新选择一下硬盘&#xff0c;可以对硬盘进行配置。 默认自动分区 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e9ce72af3d934e75be95f7f86860e92b.png 选择确认分…

GitHub的2FA验证问题解决工具

文章目录 前言认识2FA开源工具使用&#xff1a;AuthenticatorPro获取AuthenticatorPro的安卓APK如何使用 参考文章 前言 打开GitHub跳出来这个提示&#xff0c;需要进行验证&#xff1a; 如何解决呢&#xff1f;方案有很多&#xff0c;我们可以使用开源的一个工具&#xff1a;…

微软开源,全平台通用:Shell 自动补全工具 | 开源日报 No.132

microsoft/inshellisense Stars: 7.6k License: MIT inshellisense 是一个为 Shell 提供 IDE 风格自动补全的工具。它是一个终端本地运行时自动完成&#xff0c;支持 600 多个命令行工具&#xff0c;并且可以在 Windows、Linux 和 macOS 上使用。主要功能包括安装后可通过运行…

QT 输入框输入限制 正则表达式限制 整理

在使用 输入数值时&#xff0c;经常遇到限制其范围的需要&#xff0c;比如角太阳高度角范围为[-90,90]&#xff0c;经度值范围[-180,180]&#xff0c;方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围&#xff0c;如使用QIntValidator限制整数…

Python武器库开发-武器库篇之Git的分支使用(三十九)

武器库篇之Git的分支使用(三十九) Git分支是一种用于在项目中并行开发和管理代码的功能。分支允许开发人员在不干扰主要代码的情况下创建新的代码版本&#xff0c;以便尝试新功能、修复错误或独立开发功能。一般正常情况下&#xff0c;开发人员开发一个软件&#xff0c;会有两…

C#语言发展历程(1-7)

一、类型发展 C#1中是没有泛型的 在C#2中在逐渐推出泛型。C#2还引入了可空类型。 示例&#xff1a;C#泛型&#xff08;详解&#xff09;-CSDN博客 1 C#3&#xff1a;引入了匿名类型、和隐式的局部变量&#xff08;var&#xff09; 匿名类型&#xff1a;我们主要是使用在LIN…

蓝桥杯C/C++程序设计——日期统计

问题描述 小蓝现在有一个长度为 100100 的数组&#xff0c;数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示&#xff1a; 现在他想要从这个数组中寻找一些满足以下条件的子序列&#xff1a; 子序列的长度为 88&#xff1b;这个子序列可以按照下…

【数据结构】栈和队列(栈的基本操作和基础知识)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 目录 前言 栈 栈的概念和结构 栈的实现 ​…

Python+OpenGL绘制3D模型(九)完善插件功能: 矩阵,材质,法线

系列文章 一、逆向工程 Sketchup 逆向工程&#xff08;一&#xff09;破解.skp文件数据结构 Sketchup 逆向工程&#xff08;二&#xff09;分析三维模型数据结构 Sketchup 逆向工程&#xff08;三&#xff09;软件逆向工程从何处入手 Sketchup 逆向工程&#xff08;四&#xf…

结构体:搜索链表

#include<iostream> #include<iomanip> using namespace std; struct Student //创建结构体Student {int number; //学号char name[20]; //姓名float Chinese, Math, English; //成绩语数英Student* next; //下一个节点 }; Student* CreateList() //创建链表 {Stud…

Pytorch的讲解及实战·MNIST数据集手写数字识别

目录 一、前言与pytorch的下载 1、前言 2、下载pytorch ①创建虚拟环境 ②下载pytorch&#xff08;cpu版&#xff09; ③测试pytorch是否下载成功 ④使用jupyter notebook 但是使用不了torch的解决方法 二、pytorch的使用 1、Tensor的数据类型 ①torch.FloatTensor …

【网络安全 | Misc】a_good_idea

正文 使用winhex看到有zip压缩包&#xff1a; 改后缀&#xff1a; 得到两张图&#xff0c;txt中写道&#xff1a;寻找像素的秘密 使用stegsolve将合并两张图并进行像素相减&#xff1a; 再将该图进行转换色道&#xff1a; 扫描二维码得到flag&#xff1a;

计算机网络【HTTP 灵魂拷问?】

1. HTTP 报文结构是怎样的&#xff1f; 对于 TCP 而言&#xff0c;在传输的时候分为两个部分:TCP头和数据部分。 而 HTTP 类似&#xff0c;也是header body的结构&#xff0c;具体而言: 起始行 头部 空行 实体由于 http 请求报文和响应报文是有一定区别&#xff0c;因此…

【基础】【Python网络爬虫】【4.requests入门】(附大量案例代码)(建议收藏)

Python网络爬虫基础 requests 入门1. 请求方法&#xff08;Method&#xff09;2. GET与POST方法3. 简单爬虫4. url地址构成url的概念url的组成部分案例 - 添加请求头发送 5. 查看请求体6.查看响应体案例 - 某厨房首页数据爬取&#xff08;UA检测&#xff09; 7. 设置响应体编码…