当前位置: 首页 > news >正文

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;}/// <summary>/// 写数据/// </summary>/// <param name="section">配置节</param>/// <param name="key">键名</param>/// <param name="value">键值</param>public void WriteValue(string section, string key, string value){  WritePrivateProfileString(section, key, value, iPath);}/// <summary>/// 读数据/// </summary>/// <param name="section">配置节</param>/// <param name="key">键名</param>/// <returns></returns>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文本参考:

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

具体使用:

using System;
using System.Collections.Generic;
using System.IO;class IniFile
{private readonly string filePath;private readonly Dictionary<string, Dictionary<string, string>> sections;public IniFile(string filePath){this.filePath = filePath;this.sections = new Dictionary<string, Dictionary<string, string>>();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<string, string>();}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<string, string>();}sections[currentSection][key] = value;}}}}private void Save(){using (StreamWriter writer = new StreamWriter(filePath)){foreach (KeyValuePair<string, Dictionary<string, string>> section in sections){writer.WriteLine($"[{section.Key}]");foreach (KeyValuePair<string, string> 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");       }
}

 

http://www.lryc.cn/news/227483.html

相关文章:

  • clouldcompare工具使用
  • 在vue3中使用Element-plus的图标
  • 图扑智慧农业:农林牧数据可视化监控平台
  • js 加解密 jsencrypt(非对称加密 rsa)
  • xlua游戏热更新(lua访问C#)
  • 04-Spring中Bean的作用域
  • xlua游戏热更新(C#访问lua)
  • 【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)
  • 基于springboot实现桥牌计分管理系统项目【项目源码】
  • 机器学习——朴素贝叶斯
  • 【PTE-day07 文件上传2】
  • 设计模式之十一:代理模式
  • 在spring boot中调用第三方接口时重试问题
  • 记录一次多数据源配置失效的情况
  • EasyExcel导出替换列中的变量
  • 机器人规划算法——将多边形障碍物离散到地图像素点上?
  • windows11使用docker部署安装minio
  • 【JavaEESpring】Spring Web MVC⼊⻔
  • flutter逆向 ACTF native app
  • 【Redis】set 集合
  • 【算法与设计模式】
  • Javaweb之javascript的小案例的详细解析
  • Vant 移动端UI 组件自动引入
  • 敏捷开发是什么?敏捷开发流程是怎么样的?
  • 【CASS精品教程】cass3d 11.0加载超大影像、三维模型、点云数据
  • Unity Input System最简单使用
  • 3.前端调式(断点调式)
  • 拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、用户使用手册)
  • ESP32网络开发实例-将数据保存到InfluxDB时序数据库
  • NestJS——基于Node.js 服务器端应用程序的开发框架