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

汇总: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

  • 不变数据。
// config
private string _version = "0.0.1";
// dir
private string _root_dir = "Assets/Resources/Saved";
private string _save_dir = "Saves";
// file
private string _config_file = "Configs.json";
private string _tilesInfo_file = "TilesInfo.json";
// format of file
private 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.json
        return 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)){ // load
        string 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 save
            return Path.Combine(get_config("SaveDir"), save_name);
        else if (name == "version") // save version
            return _system_config.version;
        // ------------- format -------------
        else if (name == "MapNameFormat")
            return Path.Combine(get_saveConfig("root", save_name), _mapName_format);
        else
            return "";
    }

    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 save
        foreach (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);
        }
    }

版权声明:
作者:MWHLS
链接:https://mwhls.top/4818.html
来源:无镣之涯
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录