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"); }
}
相关文章:
Unity 使用INI文件存储数据或配置参数预设
法1:调用外部Capi库 具体使用: public class Ini{//读取INI文件需要调用C的APP[System.Runtime.InteropServices.DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, st…...
clouldcompare工具使用
文章目录 1.界面1.1 布局1.3 视觉显示方向1.4 放大镜1.5 建立旋转中心2.快速入门2.1 剪裁2.2 多点云拼接 1.界面 1.1 布局 参考:https://blog.csdn.net/lovely_yoshino/article/details/129595201 1.3 视觉显示方向 1.4 放大镜 1.5 建立旋转中心 2.快速入门 2.1 …...
在vue3中使用Element-plus的图标
首先安装Element-Plus-icon # 选择一个你喜欢的包管理器# NPM $ npm install element-plus/icons-vue # Yarn $ yarn add element-plus/icons-vue # pnpm $ pnpm install element-plus/icons-vue 如何使用 Element-Plus-icon官方文档链接Icon 图标 | Element Plus (element-…...
图扑智慧农业:农林牧数据可视化监控平台
数字农业是一种现代农业方式,它将信息作为农业生产的重要元素,并利用现代信息技术进行农业生产过程的实时可视化、数字化设计和信息化管理。能将信息技术与农业生产的各个环节有机融合,对于改造传统农业和改变农业生产方式具有重要意义。 图…...
js 加解密 jsencrypt(非对称加密 rsa)
这是一个非对称加密的库,可以进行 rsa 加解密 使用方法 安装 npm install jsencrypt --save jsencrypt rsa 加解密 let rsaStr "这就是一个RSA加密的测试";let jsencryptObj new jsencrypt();jsencryptObj.getKey(); //这个方法用来生成一个密钥对…...
xlua游戏热更新(lua访问C#)
CS.UnityEngine静态方法访问unity虚拟机 创建游戏物体 CS.UnityEngine.GameObject(new by lua);静态属性 CS.UnityEngine.GameObject(new by lua); -- 创建 local camera CS.UnityEngine.GameObject.Find(Main Camera); --查找 camera.name Renamed by Lua;访问组件 loca…...
04-Spring中Bean的作用域
Bean的作用域 scope的属性值 属性值作用singleton默认单例prototype原型每调用一次getBean()方法则获取一个新的Bean对象 , 每次注入的时候都是新对象request一个请求对应一个Bean仅限于在WEB应用中使用 , 需要引入web的框架如SpringMvc(global) session一个会话对应一个Bean…...
xlua游戏热更新(C#访问lua)
xlua作为Unity资源热更新的重要解决方案api,在Tecent重多游戏中被采用,本文通过案例去讲解xlua代码结构层次。 /** Tencent is pleased to support the open source community by making xLua available.* Copyright (C) 2016 THL A29 Limited, a Tence…...
【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)
一、已知一颗二叉树如下图,试求: (1)该二叉树前序、中序和后序遍历的结果。 (2)该二叉树是否为满二叉树?是否为完全二叉树? (3)将它转换成对应的树或森林。 (4)这颗二叉树的深度为多少? (5)试对该二叉树进行前序线索化。 (6)试对…...
基于springboot实现桥牌计分管理系统项目【项目源码】
基于springboot实现桥牌计分管理系统演示 JAVA简介 JavaScript是一种网络脚本语言,广泛运用于web应用开发,可以用来添加网页的格式动态效果,该语言不用进行预编译就直接运行,可以直接嵌入HTML语言中,写成js语言&#…...
机器学习——朴素贝叶斯
目录 一、贝叶斯方法 背景知识 贝叶斯公式 二、朴素贝叶斯原理 判别模型和生成模型 1.朴素贝叶斯法是典型的生成学习方法 2.朴素贝叶斯法的基本假设是条件独立性 3.朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测 用于文…...
【PTE-day07 文件上传2】
1、常见的绕过方式 (1)畸形后缀名绕过 .php、.pht、.php3、.php4、.php5、.php2、.phtml、.pHp、.html、.Htm......(2)双写过滤字符绕过 (3).htaccess文件绕过 <FilesMatch "jpg"> SetHandler application/x-httpd-php...
设计模式之十一:代理模式
代理可以控制和管理访问。 RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。RMI的好处在于你不必亲自写任何网络或I/O代码。客户程序调用远程方法就和运行在客户自己本地JVM对对象进行正常方法调用一样。 步骤一:制作远程…...
在spring boot中调用第三方接口时重试问题
文章目录 前言 spring-retry对第三方接口做重试,和处理操作 一、引入依赖 <!--重试请求的注解依赖--><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency>&l…...
记录一次多数据源配置失效的情况
说明:在一些复杂的业务情景,比如我们需要在一个订单审核通过后,在将数据库状态修改的同时,将订单与订单详细这两条数据写入到另一个数据库中。我们就可以通过在配置文件中,配置多数据源,然后通过在Mapper的…...
EasyExcel导出替换列中的变量
基于easyexcel2.0版本 easyexcel官网:https://easyexcel.opensource.alibaba.com/docs/2.x/quickstart/write 测试代码地址:https://gitee.com/wangtianwen1996/cento-practice/blob/master/src/test/java/com/xiaobai/easyexcel/DynamicHeadTest.java …...
机器人规划算法——将多边形障碍物离散到地图像素点上?
问题一:如何判断一个点是否在多边形区域内? 方法1:向量叉乘判别法 设多边形的顶点依次为A1,A2…An,要判断的点为P,那么分别计算向量PA1叉乘向量PA2,向量PA2叉乘向量PA3,…ÿ…...
windows11使用docker部署安装minio
时间 2023-11-08 windows11使用docker部署安装minio 目录 1.docker 下载镜像2.docker安装镜像3.访问控制台4.安装问题解决5.使用教程 1.docker 下载镜像 调整镜像源到国内,否则会很慢 docker pull minio/minio2.docker安装镜像 设置用户名和密码时需要注意&…...
【JavaEESpring】Spring Web MVC⼊⻔
Spring Web MVC 1. 什么是 Spring Web MVC1.1 什么是 MVC ?1.2 是什么 Spring MVC? 2. 学习 Spring MVC2.1 建立连接2.2 请求2.3 响应 3. 相关代码链接 1. 什么是 Spring Web MVC 官⽅对于 Spring MVC 的描述是这样的: 1.1 什么是 MVC ? MVC 是 Model View C…...
flutter逆向 ACTF native app
前言 算了一下好长时间没打过CTF了,前两天看到ACTF逆向有道flutter逆向题就过来玩玩啦,花了一个下午做完了.说来也巧,我给DASCTF十月赛出的逆向题其中一道也是flutter,不过那题我难度降的相当之低啦,不知道有多少人做出来了呢~ 还原函数名 flutter逆向的一大难点就是不知道l…...
Windows钉钉防撤回终极指南:免费开源工具完整使用教程
Windows钉钉防撤回终极指南:免费开源工具完整使用教程 【免费下载链接】DingTalk_Assistant 钉钉助手,主要功能包括:聊天消息防撤回、程序多开、屏蔽频繁升级等。 项目地址: https://gitcode.com/gh_mirrors/di/DingTalk_Assistant 在…...
海康工业相机SDK取图性能优化:从MV_CC_GetOneFrameTimeout到MV_CC_GetImageBuffer的实战避坑
海康工业相机SDK取图性能优化实战:从MV_CC_GetOneFrameTimeout到MV_CC_GetImageBuffer的深度解析 在工业视觉系统的开发中,持续稳定的图像采集是保证检测精度和生产效率的关键。许多开发者在使用海康威视工业相机SDK时,往往会从最直观的MV_CC…...
Phi-4-mini-reasoning完整教程:含端口映射、域名绑定、SSL证书配置
Phi-4-mini-reasoning完整教程:含端口映射、域名绑定、SSL证书配置 1. 平台介绍 Phi-4-mini-reasoning 是一个专注于推理任务的文本生成模型,特别适合处理数学题、逻辑题、多步分析和简洁结论输出。与通用聊天模型不同,它采用"题目输入…...
CSS如何控制全屏显示的元素样式
全屏元素应设display: block或flex、position: fixed并绑定top/left/width/height,:fullscreen中显式声明box-sizing: border-box,移动端优先用webkit-playsinline模拟全屏。全屏元素的display和position怎么设才不“飘”全屏显示的元素(比如…...
Hunyuan-MT-7B翻译模型部署问题排查:启动失败、内存不足解决方案
Hunyuan-MT-7B翻译模型部署问题排查:启动失败、内存不足解决方案 1. 问题概述 部署Hunyuan-MT-7B翻译模型时,最常见的两类问题都与资源分配相关: 启动失败:模型加载过程中报错退出内存不足:推理过程中出现OOM&#…...
如何用本地OCR工具快速提取视频硬字幕?Video-subtitle-extractor完整指南
如何用本地OCR工具快速提取视频硬字幕?Video-subtitle-extractor完整指南 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕…...
CHORD-X性能调优实战:针对长报告生成的显存与计算优化策略
CHORD-X性能调优实战:针对长报告生成的显存与计算优化策略 你是不是遇到过这种情况:用CHORD-X生成一份几十页的详细报告,结果要么是显存直接爆掉,要么就是生成速度慢得像蜗牛爬?特别是当报告内容涉及大量数据分析、图…...
智能电脑排班系统V2024|全自动、高自由度、零门槛排班工具
温馨提示:文末有联系方式产品定位:新一代智能电脑排班系统 扩展版智能排班软件(2024最新稳定版)是一款专为中小团队设计的桌面级自动化排班解决方案。 它融合AI逻辑引擎与人性化交互,兼顾智能调度与人工干预自由度&…...
多租户下的ERP系统的仓储管理模块分析设计茸
springboot自动配置 自动配置了大量组件,配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后,springboot会根据类路径上的jar包来自动配置bean(比如:springboot发现类路径上的MyBatis相关类ÿ…...
AI最强模型发布却说太危险不能公开:这次不是演习
Anthropic刚刚发布了一个AI模型,然后说:太危险,不能让你用 :2026年4月7日,Anthropic发布了一个叫Claude Mythos Preview的新模型。它能自主发现数千个零日漏洞,覆盖所有主流操作系统。它能在未经专项安全训练的情况下&…...
