Unity 使用INI文件存储数据或配置参数预设

法1:调用外部C++api库

具体使用:

public class Ini{

    //读取INI文件需要调用C++的APP
    
    [System.Runtime.InteropServices.DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
    [System.Runtime.InteropServices.DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);
        
    private string iPath = null;
    public Ini(string path)
    {
        this.iPath = path;
    }

    /// 
    /// 写数据
    /// 
    /// 配置节
    /// 键名
    /// 键值
    public void WriteValue(string section, string key, string value)
    {  

        WritePrivateProfileString(section, key, value, iPath);

    }

    /// 
    /// 读数据
    /// 
    /// 配置节
    /// 键名
    /// 
    public string ReadValue(string section, string key)
    {
        // 每次从ini中读取多少字节 
        System.Text.StringBuilder temp = new System.Text.StringBuilder(255);        

        GetPrivateProfileString(section, key, "", temp, 255, iPath);

        return temp.ToString();

    }
}

public class Program
{
    public static void Main()
    {
        string filePath = Application.streamingAssetsPath + "/file.ini";
        string section = "SectionName";
        string key = "KeyName";

        // 读取 INI 文件
        string value = Ini.ReadValue(section, key, "", filePath);
        Console.WriteLine("Value: " + value);

        // 写入 INI 文件
        Ini.WriteValue(section, key, "NewValue", filePath);
        Console.WriteLine("Value written.");

        // 重新读取 INI 文件
        value = Ini.ReadValue(section, key, "", filePath);
        Console.WriteLine("Value: " + value);
    }
}

ini文本参考:

Unity 使用INI文件存储数据或配置参数预设_第1张图片

法2:使用System.IO命名空间的类:

具体使用:

using System;
using System.Collections.Generic;
using System.IO;

class IniFile
{
    private readonly string filePath;
    private readonly Dictionary> sections;

    public IniFile(string filePath)
    {
        this.filePath = filePath;
        this.sections = new Dictionary>();
        Load();
    }

    public string GetValue(string section, string key)
    {
        if (sections.ContainsKey(section) && sections[section].ContainsKey(key))
        {
            return sections[section][key];
        }
        return null;
    }

    public void SetValue(string section, string key, string value)
    {
        if (!sections.ContainsKey(section))
        {
            sections[section] = new Dictionary();
        }
        sections[section][key] = value;
        Save();
    }

    private void Load()
    {
        string currentSection = null;

        foreach (string line in File.ReadLines(filePath))
        {
            string trimmedLine = line.Trim();

            if (trimmedLine.StartsWith("[") && trimmedLine.EndsWith("]"))
            {
                currentSection = trimmedLine.Substring(1, trimmedLine.Length - 2);
                continue;
            }

            int equalsIndex = trimmedLine.IndexOf('=');
            if (equalsIndex > 0)
            {
                string key = trimmedLine.Substring(0, equalsIndex).Trim();
                string value = trimmedLine.Substring(equalsIndex + 1).Trim();

                if (!string.IsNullOrEmpty(currentSection) && !string.IsNullOrEmpty(key))
                {
                    if (!sections.ContainsKey(currentSection))
                    {
                        sections[currentSection] = new Dictionary();
                    }
                    sections[currentSection][key] = value;
                }
            }
        }
    }

    private void Save()
    {
        using (StreamWriter writer = new StreamWriter(filePath))
        {
            foreach (KeyValuePair> section in sections)
            {
                writer.WriteLine($"[{section.Key}]");

                foreach (KeyValuePair entry in section.Value)
                {
                    writer.WriteLine($"{entry.Key}={entry.Value}");
                }

                writer.WriteLine();
            }
        }
    }
}

public class Program
{
    public static void Main()
    {
        string filePath = Application.streamingAssetsPath + "/file.ini";
        string section = "SectionName";
        string key = "KeyName";

        IniFile iniFile = new IniFile(filePath);

        // 读取值
        string value = iniFile.GetValue("section", "key");
        Console.WriteLine(value);

        // 设置值
        iniFile.SetValue("Section2", "Key2", "Value2");       
        
    }
}

 

你可能感兴趣的:(unity,游戏引擎,c#)