Unity记录4.4-存储-系统数据以配置文件保存

文章首发见博客:https://mwhls.top/4818.html。
无图/格式错误/后续更新请见首发页。
更多更新请到mwhls.top查看
欢迎留言提问或批评建议,私信不回。

汇总:Unity 记录

摘要:处处修改->一处修改的系统配置文件。

思路-2023/08/18

  • 前面的文件读取、模板转换等涉及路径信息,或是一些游戏的配置信息,都是以字符串变量来处理的。一次修改需要处处修改,因此转为系统配置文件。
  • 系统配置信息:两个地方存,可变的配置存在文件里,不可变的配置存在类里。
  • 存档配置信息:以文件存,存档名下保存配置文件与地图文件。

最终效果-2023/08/18

  • 后几个标题都是虚的,目的就是实现下面的转换。
    string tiles_info_path = "Assets/Resources/Saved/TilesInfo.json";->string tiles_info_path = game_configs.get_config("TilesInfo");string filename = "Map_" + block_offsets[0] + "-" + block_offsets[1] + ".json";string file_path = "Assets/Resources/Saved/" + filename;->string file_path = game_configs.get_saveConfig("MapNameFormat");file_path = file_path.Replace("{x}", block_offsets[0].ToString());file_path = file_path.Replace("{y}", block_offsets[1].ToString());

数据结构-2023/08/17

  • 不变数据。
    // configprivate string _version = "0.0.1";// dirprivate string _root_dir = "Assets/Resources/Saved";private string _save_dir = "Saves";// fileprivate string _config_file = "Configs.json";private string _tilesInfo_file = "TilesInfo.json";// format of fileprivate string _mapName_format = "Map_{x}_{y}.json";private SystemConfig _system_config;private Dictionary<string, SaveConfig> _saves_config;
  • 可变数据。
    public struct SaveConfig{public string version;public string name;}public struct SystemConfig{public string version;public string last_save;}

系统配置-2023/08/17

  • 用于外部读取配置信息,暂时仅实现保存。
    public string get_config(string name){// ------------- config -------------if (name == "version")return _system_config.version;else if (name == "last_save")return _system_config.last_save;// -------------  file  -------------else if (name == "TilesInfo")return Path.Combine(_root_dir, _tilesInfo_file);// -------------  dir   -------------else if (name == "SaveDir")return Path.Combine(_root_dir, _save_dir);// -------------  save  -------------else // e.g. Assets/Resources/Saved/ + Save/ + "PlayerName"/ + configs.jsonreturn Path.Combine(get_config("SaveDir"), name, _config_file);}public void select_save(string name){_system_config.last_save = name;}private void _init_system_config(string path){_system_config = new SystemConfig();_system_config.version = _version;_system_config.last_save = "";string system_config_json = JsonConvert.SerializeObject(_system_config, Formatting.Indented);File.WriteAllText(path, system_config_json);}private void _load_system_config(){string system_config_path = Path.Combine(_root_dir, _config_file);if (File.Exists(system_config_path)){ // loadstring jsonText = File.ReadAllText(system_config_path);_system_config = JsonConvert.DeserializeObject<SystemConfig>(jsonText);}else{ // init_init_system_config(system_config_path);}}

存档配置-2023/08/17

  • 保存读取与初始化。
        public string get_saveConfig(string name, string save_name=""){if (save_name == "")save_name = get_config("last_save");SaveConfig save_config = _saves_config[save_name];// ------------- config -------------if (name == "root") // root dir of savereturn Path.Combine(get_config("SaveDir"), save_name);else if (name == "version") // save versionreturn _system_config.version;// ------------- format -------------else if (name == "MapNameFormat")return Path.Combine(get_saveConfig("root", save_name), _mapName_format);elsereturn "";}private SaveConfig _init_save_config(string name){SaveConfig save_config = new SaveConfig();if (name == "")throw new System.Exception("Name of save is EMPTY.");else if (_saves_config.ContainsKey(name))return _saves_config[name];save_config.version = _version;save_config.name = name;string save_config_path = Path.Combine(get_config(name));string save_config_dir = Path.GetDirectoryName(save_config_path);Directory.CreateDirectory(save_config_dir);string save_config_json = JsonConvert.SerializeObject(save_config, Formatting.Indented);File.WriteAllText(save_config_path, save_config_json);_saves_config.Add(name, save_config);return save_config;}private void _load_saves_config(){// Init, and get all saves ("dir name" == "save name")_saves_config = new Dictionary<string, SaveConfig>();string save_dir = get_config("SaveDir");string[] saves_name = Directory.GetDirectories(save_dir);// Loop for load config of saveforeach (string save_name in saves_name){string name = Path.GetFileName(save_name);string save_config_path = get_config(name);string jsonText = File.ReadAllText(save_config_path);SaveConfig save_configs = JsonConvert.DeserializeObject<SaveConfig>(jsonText);_saves_config.Add(name, save_configs);}}

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

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

相关文章

游戏 小代码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

Java 面试 - Redis

Redis Redis 是基于键值对的非关系型数据库。Redis 拥有string、hash、list、set、zset等多种数据结构, redis具有惊人的读写性能, 其优秀的持久化机制是的它在断电和机械故障时也不会发生数据丢失, 可以用于热点数据存放, 还提供了键过期、发布订阅、食物、流水线、LUA脚本等多…

按钮控件的基类--- QAbstractButton 类(抽象类)

1、QAbstractButton 属性 QAbstractButton 属性速查表属性名说明属性名说明autoExclusive自动排他性checked是否被选中autoRepeat是否启用自动重复down是否处于按下状态autoRepeatDelay初始延迟(毫秒)icon按钮上显示的图标autoRepeatInterval时间间隔(毫秒iconSize显示的图标的…

Vue + Element UI 前端篇(十二):用户管理模块

Vue Element UI 实现权限管理系统 前端篇&#xff08;十二&#xff09;&#xff1a;用户管理模块 用户管理模块 添加接口 在 http/moduls/user.js 中添加用户管理相关接口。 import axios from ../axios/* * 用户管理模块*/// 保存 export const save (params) > {ret…

windows查看端口占用,通过端口找进程号(查找进程号),通过进程号定位应用名(查找应用)(netstat、tasklist)

文章目录 通过端口号查看进程号netstat通过进程号定位应用程序tasklist 通过端口号查看进程号netstat 在Windows系统中&#xff0c;可以使用 netstat 命令来查看端口的占用情况。以下是具体的步骤&#xff1a; 打开命令提示符&#xff08;CMD&#xff09;&#xff1a;按WinR组…

Linux简介

为什么选择Linux&#xff1f; Linux是一个优秀的操作系统 硬件方面&#xff1a;适合嵌入式&#xff0c;服务器&#xff0c;移动设备&#xff0c;桌面&#xff0c;计算机集群和超级计算机应用方面&#xff1a;人工智能&#xff0c;分布式计算&#xff0c;云计算&#xff0c;大数…

诊断网络卡的原因

首先&#xff0c;通过ipconfig和ping命令来诊断。 手头要有一台Windows电脑。在dos窗口下&#xff0c;输入ipconfig&#xff0c;可以查看到本机“手动设置”或者“自动获取”的IP地址。 这里有几种可能性&#xff1a; IP地址和网关地址都正确。&#xff08;不存在问题&#xf…

stable diffusion实践操作-tagg插件-反推提示词

系列文章目录 本文专门开一节写SD原理相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 文章目录 系列文章目录前言一、tagg插件反推词使用1. 安装2. 打开3 发送到文生图4 结果 总结 前言 本章主要讲一个反推提示词的插件tagg.…

【Git】git tag 查看版本号 | 删除本地 | 删除远程仓库| 批量删除

一、删除指定tag 使用场景&#xff1a;比如我们在本地git tag了一个错误的版本号&#xff0c;但是还没有push&#xff0c;想直接删掉避免污染远程仓库 1、删除指令 要删除指定的Git标签&#xff08;版本号&#xff09;&#xff0c;您可以使用以下命令&#xff1a; git tag -d 标…

DockerFile简明教程

需求 由于在测试环境中使用了docker官网的centos 镜像&#xff0c;但是该镜像里面默认没有安装ssh服务&#xff0c;在做测试时又需要开启ssh。所以上网也查了查资料。下面详细的纪录下。在centos 容器内安装ssh后&#xff0c;转成新的镜像用于后期测试使用。 镜像定制 第一种…

电气工程中重要的测量术语:“kVRMS” | 百能云芯

在电气工程和电子领域&#xff0c;术语“kVRMS”至关重要。它是工程师和技术人员用来准确评估电气系统电压的关键测量方法。在这篇综合文章中&#xff0c;我们将深入探讨 kVRMS 的含义、其意义、应用。 kVRMS 代表“千伏均方根”。为了理解这个术语&#xff0c;我们来分解一下&…

Linux的服务器日志分析及性能调优

作为网络安全和数据传输的重要环节&#xff0c;代理服务器在现代互联网中扮演着至关重要的角色。然而&#xff0c;在高负载情况下&#xff0c;代理服务器可能面临性能瓶颈和效率问题。本文将介绍如何利用Linux系统对代理服务器进行日志分析&#xff0c;并提供一些实用技巧来优化…

rpm打包

文章目录 rpm打包 1. rpm打包步骤0&#xff09;准备工作&#xff1a;安装打包工具rpm-build和rpmdevtools&#xff08;1&#xff09;在线安装&#xff08;2&#xff09;离线安装 1&#xff09;创建初始化目录2&#xff09;准备打包内容3&#xff09;编写打包脚本 spec文件4&…

测试需求分析

什么是软件测试需求&#xff1a; 灰度测试&#xff1a;先发布部分功能&#xff0c;然后看用户的反馈&#xff0c;再去发布另外一部分的更新 A/B测试&#xff1a;先发布的功能先让A部分的用户进行更新&#xff0c;再根据用户的犯困再更新B用户的功能 需求测试&#xff1a; 功…

hive 基础知识

一 hive 是什么 在本节前我们需要明确 hive 是什么 上面两个代码块&#xff0c;左边的是 mapreduce 的代码块&#xff0c;右边的是hive 的代码块 很容易看出来&#xff0c;右边的 hive 写起来要更容易更快些&#xff0c;而执行效率&#xff0c;右边的 hive 只比左边多一个翻译…

Redis 7 第六讲 主从模式(replica)架构篇

🌹🌹🌹 此篇开始进入架构篇范围(❤艸`❤) 理论 即主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。 使用场景 读写分离 容灾备份数据备份水平扩容主从架构 演示案例 注:masterauth、replicaof主…

直线导轨的替换方法

目前&#xff0c;直线导轨的使用率持续上升&#xff0c;已广泛应用在各种各样的行业中&#xff0c;可替换性高是其广泛使用的重要原因之一&#xff01;直线导轨的替换指的就是导轨和滑块可以单出&#xff0c;不用整套替换。 市面上使用率最高的直线导轨品牌应该就是台湾*银了&a…

优先级队列priority_queue以及仿函数的使用

目录 优先级队列priority_queuepriority_queue的模拟实现仿函数 优先级队列priority_queue 优先级队列priority_queue是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它默认第一个元素总是它所包含的元素中最大的 优先级队列默认使用vector作为底层存储数据的…

Apollo在Java中的使用

本节主要讲解在普通的 Java 项目和 Spring Boot 中如何使用 Apollo。 普通 Java 项目中使用 加入 Apollo Client 的 Maven 依赖&#xff0c;代码如下所示。 <dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client<…

kali 安装cpolar内网穿透实现 ssh 远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过cpolar 内网穿透软件实现ssh 远程连接kali! 1. 启动kali ssh 服务 默认新安装的kali系统会关闭ssh 连接服务,我们通…