文章首发见博客: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);}}