Unity类银河恶魔城学习记录13-5,6 p146 Delete save file,p147 Encryption of saved data源代码

    Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考
此代码仅为较上一P有所改变的代码

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

FileDataHandler.cs
using System;
using System.IO;
using UnityEngine;
public class FileDataHandler
{private string dataDirPath = "";private string dataFileName = "";private bool encryptData = false;//是否加密判断private string codeWord = "sukaczev";//加密密码public FileDataHandler(string _dataDirPath, string _dataFilePath,bool _encryptData)//构造函数拿到需要保存的位置和文件名称{dataDirPath = _dataDirPath;dataFileName = _dataFilePath;encryptData = _encryptData;}public void Save(GameData _data){string fullPath = Path.Combine(dataDirPath, dataFileName);//合成路径函数 将位置和文件合并成实际的可以读取的路径try//用try防止其报错{Directory.CreateDirectory(Path.GetDirectoryName(fullPath));//通过路径创建出需要的文件,存在就不创建了string dataToStore = JsonUtility.ToJson(_data, true);//将传过来的gameData转换成文本形式并且使其可读if (encryptData)dataToStore = EncryptDecrypt(dataToStore);using (FileStream stream = new FileStream(fullPath, FileMode.Create))//两个using 第一个进入文件使其变为可编写模式{using (StreamWriter writer = new StreamWriter(stream))//第二个拿到文件对其进行编辑{writer.Write(dataToStore);//写入函数}}}catch (Exception e){Debug.LogError("Error on trying to save data to file " + fullPath + "\n" + e);}}public GameData Load()//同上{string fullPath = Path.Combine(dataDirPath, dataFileName);GameData loadData = null;if (File.Exists(fullPath))//存在才能操作{try{string dataToLoad = "";using (FileStream stream = new FileStream(fullPath, FileMode.Open)){using (StreamReader reader = new StreamReader(stream)){dataToLoad = reader.ReadToEnd();}}if(encryptData){dataToLoad = EncryptDecrypt(dataToLoad);}loadData = JsonUtility.FromJson<GameData>(dataToLoad);//转换为游戏需要的类型}catch (Exception e){Debug.LogError(e);}}return loadData;}public void Delete()//删除对应文件函数{string fullPath = Path.Combine(dataDirPath, dataFileName);if(File.Exists(fullPath))//存在才能删除 File操作{File.Delete(fullPath);}}private string EncryptDecrypt(string _data)//数据加密函数{string modifiedData = "";//返回的加密文件for(int i = 0;i <_data.Length;i++){modifiedData += (char)(_data[i] ^ codeWord[i % codeWord.Length]);//怎么把加密文件回退到没加密,搞不懂}return modifiedData;}
}
GameData.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;public class SaveManager : MonoBehaviour
{public static SaveManager instance;[SerializeField] private string fileName;[SerializeField] private bool encryptData;GameData gameData;private List<ISaveManager> saveManagers;private FileDataHandler dataHandler;[ContextMenu("Delete save file")]//把一个方法在Unity里面显示出来的做法private void DeleteSaveData()//调用并被公开的删除文件函数{dataHandler = new FileDataHandler(Application.persistentDataPath, fileName, encryptData);dataHandler.Delete();}private void Awake(){if (instance != null)Destroy(instance);elseinstance = this;}private void Start(){dataHandler = new FileDataHandler(Application.persistentDataPath, fileName, encryptData);saveManagers = FindAllSaveManagers();LoadGame();}public void NewGame(){gameData = new GameData();}public void LoadGame(){gameData = dataHandler.Load();if(this.gameData == null){Debug.Log("No data");NewGame();}foreach(ISaveManager saveManager in saveManagers)//循环调用所有的找到脚本的LoadData和SaveData到,这样便可以将所有的数据汇聚到gameData中,并从中拿到data{saveManager.LoadData(gameData);}Debug.Log("Loaded currency " + gameData.currency);}public void SaveGame()循环调用所有的找到脚本的LoadData和SaveData到,这样便可以将所有的数据汇聚到gameData中,并从中拿到data{foreach(ISaveManager saveManager in saveManagers){saveManager.SaveData(ref gameData);}dataHandler.Save(gameData);}private void OnApplicationQuit(){SaveGame();}private List<ISaveManager> FindAllSaveManagers()//全局寻找带ISave的脚本的函数{IEnumerable<ISaveManager> saveManager = FindObjectsOfType<MonoBehaviour>().OfType<ISaveManager>();return new List<ISaveManager>(saveManager);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据科学/分析党的福音—亚马逊云科技Amazon Zero ETL(零ETL)技术介绍

2023年亚马逊云科技全球大会Re:invent上&#xff0c;数据产品VP Swami博士正式推出了Amazon Zero ETL服务&#xff0c;支持业务大数据从Aurora向Redshift的实时导入、分析。 过去在亚马逊云科技上构建数据分析平台&#xff0c;最令人头疼的莫属ETL环节。遇到的挑战包括:▶️提取…

ECharts海量数据渲染解决卡顿

file模块用来写文件 我们首先使用node来生成10万条数据; 借助node的fs模块就行; 如果不会的小伙伴;也不要担心;超级简单// 引入模块 let fs = require(fs); // 数据内容 let fileCont=我是文件内容 /*** 第一个参数是文件名* 第二个参数是文件内容,这个文件的内容必须是字…

2024年 团体程序设计天梯赛个人总结

前言&#xff1a; 这是一个悲伤的故事~ &#x1f3c6;题目传送门 ⭐L1一阶题⭐L1-097 编程解决一切&#xff08;5分&#xff09;⭐L1-098 再进去几个人&#xff08;5分&#xff09;⭐L1-099 帮助色盲&#xff08;10分&#xff09;⭐L1-100 四项全能&#xff08;10 分&#xff0…

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections(野外的 NERF: 用于无约束照片采集的神经辐射场&#xff09; Abstract 我们提出了一种基于学习的方法来合成新的视图的复杂场景使用只有非结构化的收集野生照片。我们建立在神经辐射场(neRF)的…

ONLYOFFICE:一站式在线协作办公好选择

&#x1f6f5;前言 随着信息技术的迅猛发展&#xff0c;人们对办公方式的需求也在不断变化。传统的办公软件已经无法满足现代企业的需求&#xff0c;而在线协作办公软件则成为了一个热门选择。 在众多在线协作办公软件中&#xff0c;ONLYOFFICE凭借其强大的功能和灵活的部署方…

如何远程实时监控员工的电脑屏幕?

企业规模的扩大和管理的复杂化&#xff0c;远程实时监控员工的电脑屏幕成为了许多企业管理者的需求。 这种监控不仅可以帮助管理者了解员工的工作状态&#xff0c;提高工作效率&#xff0c;还能在一定程度上保障企业的信息安全。 那么&#xff0c;如何实现远程实时监控员工的电…

Spring三级缓存源码解析

Spring三级缓存 前置知识三级缓存定义SpringBean生命周期 Bean的初始化getSingleton 分析加入一级缓存 CreateBean过程(A)A填充属性BB填充属性A,执行getSingleton&#xff08;A&#xff09;B完成初始化 前置知识 三级缓存定义 public class DefaultSingletonBeanRegistry ext…

玩转PyCharm

玩转PyCharm PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个集成开发环境&#xff0c;它最大的优点是能够大大提升Python开发者的工作效率&#xff0c;为开发者集成了很多用起来非常顺手的功能&#xff0c;包括代码调试、高亮语法、代码跳转、智能提示、自动补…

对于地理空间数据,PostGIS扩展如何在PostgreSQL中存储和查询地理信息?

文章目录 一、PostGIS扩展简介二、PostGIS存储地理空间数据1. 创建空间数据表2. 插入空间数据 三、PostGIS查询地理空间数据1. 查询指定范围内的地理空间数据2. 计算地理空间数据之间的距离3. 对地理空间数据进行缓冲区分析 四、总结 地理空间数据是指描述地球表面物体位置、形…

BUUCTF——[网鼎杯 2018]Fakebook

BUUCTF——[网鼎杯 2018]Fakebook 1.测试SQl注入的注入点1 2.尝试使用-- -进行闭合&#xff0c;但是不行 3.尝试使用数字型的SQL注入&#xff0c;使用--进行注入后面的SQL语句 4.尝试使用and 11 判断其是否真的存在SQL注入 5.尝试使用and 12进行判断 6.发现这个地方确实存…

attempt to compare nil with number -- 黑马点评出现问题

问题情况 : 主要问题 : 调用lua执行redis时&#xff0c;有一个值会接受nil&#xff08;因为redis中没有该数据&#xff09;或者数值&#xff0c;当该值为nil时执行报错&#xff0c;因为会用到将该值与其他数字比较&#xff0c;故报错attempt to compare nil with number 当然…

react,Chart

一、基础图&#xff1a;https://ant-design-charts.antgroup.com/ Ant Design Charts 1. 首先要下载ant-design/charts&#xff0c;然后在页面中添加如下柱状图代码: import React from react; import { Column } from ant-design/chartsconst DemoColumn: React.FC () …