游戏开发日志13(利用PlayerPrefs来存储数据)

news2024/11/16 13:23:53

为游戏设置一个音量键,可以自由选择背景音乐是否开启,并且保存这个设置。

设计了UI如下:

其中BGM为Toggle,其余四个为Button 

 在canvas(set)上添加两个脚本:GameMnue,GameManage

public class GameManage : MonoBehaviour
{
    public static GameManage instance;
    public bool IsPaused;

   

    private void Awake() {
        if(instance==null)
        { 
            instance=this;
        }else{
            if(instance!=this)
            {
                Destroy(gameObject);
            }
        }
        DontDestroyOnLoad(gameObject);
    }
}
public class GameMnue : MonoBehaviour
{
    public Image gameMenuImage;

    public Toggle BGMToggle;
    public AudioSource BGMSource;

  
    public void Start() {
        gameMenuImage.gameObject.SetActive(false);

    }

    public void Update() {
        if(Input.GetKeyDown(KeyCode.Escape))
        {
            if(GameManage.instance.IsPaused)
            {
                Resume();
            }
            else
            {
                Pause();
            }
        }
        BGMManage();
    }

    public void Resume()
    {
        gameMenuImage.gameObject.SetActive(false);
        Time.timeScale=1;
        GameManage.instance.IsPaused=false;
    }
    private void Pause()
    {
        gameMenuImage.gameObject.SetActive(true);
        Time.timeScale=0.0f;
        GameManage.instance.IsPaused=true;
    }

    public void BGMToggleBUtton()
    {
        if(BGMToggle.isOn)
        {
            PlayerPrefs.SetInt("BGM",1);           
        }
        else{
            PlayerPrefs.SetInt("BGM",0);          
        }
    }

    private void BGMManage()
    {
        if(PlayerPrefs.GetInt("BGM")==1)
        {
            BGMToggle.isOn=true;
            BGMSource.enabled=true;
        }else if(PlayerPrefs.GetInt("BGM")==0)
        {
            BGMToggle.isOn=false;
            BGMSource.enabled=false;
        }
    }

   

其中PlayerPrefs这个静态类,可以通过键值对来存储整数,如PlayerPrefs.SetInt("BGM",0)中,BGM为键名,0为要存入键的值。

类似的,我还存储了一个物品的数量信息,及主角的位置信息:

public class GameMnue : MonoBehaviour
{
    public Image gameMenuImage;

    public Toggle BGMToggle;
    public AudioSource BGMSource;

    public GoodsItem projectile;

    public RubbyController rubby;

    public Vector2 position;

    public void Start() {
        gameMenuImage.gameObject.SetActive(false);

        rubby=FindObjectOfType<RubbyController>();
    }

    public void Update() {
        if(Input.GetKeyDown(KeyCode.Escape))
        {
            if(GameManage.instance.IsPaused)
            {
                Resume();
            }
            else
            {
                Pause();
            }
        }
        BGMManage();
    }

    public void Resume()
    {
        gameMenuImage.gameObject.SetActive(false);
        Time.timeScale=1;
        GameManage.instance.IsPaused=false;
    }
    private void Pause()
    {
        gameMenuImage.gameObject.SetActive(true);
        Time.timeScale=0.0f;
        GameManage.instance.IsPaused=true;
    }

    public void BGMToggleBUtton()
    {
        if(BGMToggle.isOn)
        {
            PlayerPrefs.SetInt("BGM",1);           
        }
        else{
            PlayerPrefs.SetInt("BGM",0);          
        }
    }

    private void BGMManage()
    {
        if(PlayerPrefs.GetInt("BGM")==1)
        {
            BGMToggle.isOn=true;
            BGMSource.enabled=true;
        }else if(PlayerPrefs.GetInt("BGM")==0)
        {
            BGMToggle.isOn=false;
            BGMSource.enabled=false;
        }
    }

    public void SaveButton()
    {
        SaveByPlayerprefs();
    }
    public void LoadButton()
    {
        LoadByPlayerprefs();
    }
    public void SaveByPlayerprefs()
    {
        PlayerPrefs.SetInt("projectile",projectile.itemHeld);

        PlayerPrefs.SetFloat("PlayerPosX",rubby.transform.position.x);
        PlayerPrefs.SetFloat("PlayerPosY",rubby.transform.position.y);
    }
    public void LoadByPlayerprefs()
    {
        projectile.itemHeld=PlayerPrefs.GetInt("projectile");
        InventoryManage.RefreshItem();

        position.x=PlayerPrefs.GetFloat("PlayerPosX");
        position.y=PlayerPrefs.GetFloat("PlayerPosY");
        rubby.transform.position=new Vector2(position.x,position.y);
    }
}

这里使用rubby.transform.position=new Vector2(position.x,position.y);来修改位置信息是个不错的选择,因为rubby.transform.position是不能被修改的。

保存方法:PlayerPrefs.SetInt(“key”, value);//SetFloat和SetString也可以
读取方法:PlayerPrefs.GetInt(“key”)//GetFloat和GetString也可以
删除所有数据方法:PlayerPrefs.DeletAll()
删除单一数据:PlayerPrefs.DeleteKey(“keyA”)//删除key为“keyA”的数据
安全校验:PlayerPrefs.HasKey(“keyB”)//返回key为“keyB”的数据,不存在的话返回默认值0
PlayerPrefs.Save():不推荐。用于在突发退出程序时,保存数据以备恢复时使用,但是会导致程序间断所以不建议

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

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

相关文章

【备战秋招】每日一题:4月15日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第三题-交通规划 在线评测链接:P1237 题目内容 塔子哥所在的国家有 n 个城市&#xff0c;这 n 个城市排成一列&#xff0c;按顺序编号为 1,2,3,...,n。然而&#xff0c;由…

【备战秋招】每日一题:4月8日美团春招第五题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第五题-RGP种树 在线评测链接:P1170 题目描述&#xff1a; 塔子哥是一位著名的冒险家&#xff0c;他经常在各种森林里探险。今天&#xff0c;他来到了道成林&#xff0c;…

【Django 网页Web开发】24. 实战项目:moudleForm的文件上传应用到城市管理(17)(保姆级图文)

目录 用户上传文件存放media如何启用1. 在urls.py中进行配置&#xff1a;2. 在settings.py中进行配置&#xff1a;3. 能够通过media的url访问文件 moudleForm上传文件实现城市管理1. moudle.py2. url.py3. city.py4. city.html5. 文件上传小结6. 城市管理效果总结 欢迎关注 『D…

Vivado远程开发探索

平时主要用轻薄本办公&#xff0c;但是有时候又需要用Vivado做一些开发的工作&#xff0c;就感觉生产力不够。如果能在远程的高性能服务器上跑Vivado综合实现就好了。前段时间用ubuntu下安装的Vivado发现有一个Remote Host的设置。所以就准备折腾一下这个。 WSL WSL的安装看官…

chatgpt赋能python:Python怎么调成黑色背景?

Python怎么调成黑色背景&#xff1f; 随着人们对代码编辑器的要求越来越高&#xff0c;许多开发者都喜欢在黑色背景下编写代码。不仅仅是视觉审美方面考虑&#xff0c;黑色背景对眼睛的伤害也比浅色背景要小得多。本篇文章将介绍如何在Python中调整为黑色背景 介绍 默认情况…

[C++刷题之旅]反转链表

&#x1f338;心有所向&#xff0c;日复一日&#xff0c;必有精进 &#x1f338;专栏&#xff1a;C刷题之旅 &#x1f338;作者&#xff1a;早凉 目录 题目一&#xff1a;反转链表 【题目链接】 【题目描述】 【解题思路】 【代码实现】 进阶&#xff1a;链表中指定区间…

【异步】Futurn、FutureTask、CompletionService、CompletableFuture

1. Callable 在这篇文章中 【Thread】线程的基本概念及创建方式&#xff08;一&#xff09;&#xff0c;我们知道创建线程的几种方式。其中&#xff0c;有两个是通过接口来实现的&#xff1a;Runnable、Callable。它们的区别如下&#xff1a; Runnable 接口中的方法是没有返回…

代码审计——XXE详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 XXE&#xff08;XML External Entity Injection&#xff09;是一种针对XML终端实施的攻击&#xff0c;漏洞产生的根本原因就是…

chatgpt赋能python:Python怎么调整行距

Python怎么调整行距 在Python中&#xff0c;我们可以使用不同的方法来调整文本行距。 在这篇文章中&#xff0c;我们将讨论最常用的两种方法&#xff1a;使用文本编辑器和使用Python代码。 使用文本编辑器 许多文本编辑器都具有设置行距的选项。 这通常在“格式”或“段落”…

SpringBoot + Mybatis Plus 实现的瀑布内容管理系统、CMS建站系统

瀑布内容管理系统 瀑布内容管理系统&#xff0c;采用SpringBoot Apache Shiro Mybatis Plus Thymeleaf 实现的内容管理系统(附带权限管理)&#xff0c;是搭建博客、网站的不二之选。 项目介绍 PB-CMS&#xff0c;致力于开发最精简、实用的CMS管理系统&#xff0c;适合搭建…

chatgpt赋能python:Python如何访问手机:探索移动端SEO优化的新途径

Python如何访问手机&#xff1a;探索移动端SEO优化的新途径 随着移动互联网的快速发展&#xff0c;移动端成为了各大搜索引擎的竞争焦点。对于SEO优化工程师而言&#xff0c;探索移动端SEO优化的新途径显得尤为关键。而Python作为一种强大的编程语言&#xff0c;在移动端SEO优…

MM32F3273G8P火龙果开发板MindSDK开发教程21 - PWM的使用

MM32F3273G8P火龙果开发板MindSDK开发教程21 - PWM的使用 1、简述 开发版的LED灯连接PA1脚&#xff0c;而PA1可以映射TIM2_CH2&#xff0c;所以我们用通用定时器2的TIM2_CH2输出PWM到PA1脚&#xff0c;通过更改PWM的占空比&#xff0c;来改变LED的亮度。 2、LED灯的初始化…

读数据压缩入门笔记06_上下文转换

1. 压缩算法可归为两类 1.1. 统计压缩&#xff08;即VLC&#xff09; 1.2. 字典压缩&#xff08;如LZ78&#xff09; 1.3. 从不同的角度利用了给定数据流中存在的统计冗余信息 2. 上下文变换 2.1. contextual transform 2.2. 给定一组相邻的符号集&#xff0c;对它们进行…

代码审计——任意文件下载详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 网站可能提供文件查看或下载的功能&#xff0c;如果对用户查看或下载的文件不做限制&#xff0c;就能够查看或下载任意的文件&…

大数据相关概念了解

Hadoop生态及Hive、HBase、Impala、HDFS之间的关系 Hadoop生态(什么是 Hadoop) Apache Hadoop软件库是一个框架&#xff0c;允许使用简单的编程模型在计算机集群之间对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台计算机&#xff0c;每台计算机都提供本地计算和…

【雕爷学编程】Arduino动手做(112)---2.4G24L01无线模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

chatgpt赋能python:Python怎么调整黑色的SEO?

Python怎么调整黑色的SEO&#xff1f; 在当今互联网的大环境下&#xff0c;各种搜索引擎的存在具有巨大的价值&#xff0c;特别是Google&#xff0c;百度等常用搜索引擎的SEO排名对于企业、个人品牌的宣传有着极其重要的意义。但是&#xff0c;如果出现黑色SEO的情况&#xff…

Spark操作HBase的数据,实现列值的计算

本文将介绍如何使用Spark操作HBase的数据&#xff0c;实现列之间的计算&#xff0c;以特征值计算为例。特征值是指从原始数据中提取出来的具有代表性或判别性的数值&#xff0c;可以用于数据分析或机器学习等领域。本文将使用hbase-spark连接器&#xff0c;通过Spark RDD的方式…

深度解析:圣湘生物的数字化转型升级之路(附方案详情)

随着“互联网”医疗技术在医疗行业的应用不断深化&#xff0c;数字化正在加速推进IVD行业的创新。 当前&#xff0c;IVD企业应对机遇和挑战的核心是提升竞争力。 IVD企业基于企业资源&#xff0c;提升综合竞争力主要分【硬实力】和【软实力】。 一方面&#xff1a;需要企业不…

跟李沐学AI;Meta可能让其开源AI模型商业化,让开发者赚钱

&#x1f989; AI新闻 &#x1f680; Meta可能让其开源AI模型商业化&#xff0c;让开发者赚钱 摘要&#xff1a;Meta正考虑将其开源大语言模型&#xff08;LLM&#xff09;的下一个版本用于商业用途&#xff0c;这可以为聊天机器人等提供支持。此举可能会让更多开发者使用替代…