当前位置: 首页 > 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");       }
}

 

相关文章:

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

法1&#xff1a;调用外部Capi库 具体使用&#xff1a; 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 布局 参考&#xff1a;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-…...

图扑智慧农业:农林牧数据可视化监控平台

数字农业是一种现代农业方式&#xff0c;它将信息作为农业生产的重要元素&#xff0c;并利用现代信息技术进行农业生产过程的实时可视化、数字化设计和信息化管理。能将信息技术与农业生产的各个环节有机融合&#xff0c;对于改造传统农业和改变农业生产方式具有重要意义。 图…...

js 加解密 jsencrypt(非对称加密 rsa)

这是一个非对称加密的库&#xff0c;可以进行 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&#xff0c;在Tecent重多游戏中被采用&#xff0c;本文通过案例去讲解xlua代码结构层次。 /** Tencent is pleased to support the open source community by making xLua available.* Copyright (C) 2016 THL A29 Limited, a Tence…...

【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)

一、已知一颗二叉树如下图&#xff0c;试求&#xff1a; (1)该二叉树前序、中序和后序遍历的结果。 (2)该二叉树是否为满二叉树&#xff1f;是否为完全二叉树&#xff1f; (3)将它转换成对应的树或森林。 (4)这颗二叉树的深度为多少? (5)试对该二叉树进行前序线索化。 (6)试对…...

基于springboot实现桥牌计分管理系统项目【项目源码】

基于springboot实现桥牌计分管理系统演示 JAVA简介 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&#…...

机器学习——朴素贝叶斯

目录 一、贝叶斯方法 背景知识 贝叶斯公式 二、朴素贝叶斯原理 判别模型和生成模型 1&#xff0e;朴素贝叶斯法是典型的生成学习方法 2&#xff0e;朴素贝叶斯法的基本假设是条件独立性 3&#xff0e;朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测 用于文…...

【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提供了客户辅助对象和服务辅助对象&#xff0c;为客户辅助对象创建和服务对象相同的方法。RMI的好处在于你不必亲自写任何网络或I/O代码。客户程序调用远程方法就和运行在客户自己本地JVM对对象进行正常方法调用一样。 步骤一&#xff1a;制作远程…...

在spring boot中调用第三方接口时重试问题

文章目录 前言 spring-retry对第三方接口做重试&#xff0c;和处理操作 一、引入依赖 <!--重试请求的注解依赖--><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency>&l…...

记录一次多数据源配置失效的情况

说明&#xff1a;在一些复杂的业务情景&#xff0c;比如我们需要在一个订单审核通过后&#xff0c;在将数据库状态修改的同时&#xff0c;将订单与订单详细这两条数据写入到另一个数据库中。我们就可以通过在配置文件中&#xff0c;配置多数据源&#xff0c;然后通过在Mapper的…...

EasyExcel导出替换列中的变量

基于easyexcel2.0版本 easyexcel官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/2.x/quickstart/write 测试代码地址&#xff1a;https://gitee.com/wangtianwen1996/cento-practice/blob/master/src/test/java/com/xiaobai/easyexcel/DynamicHeadTest.java …...

机器人规划算法——将多边形障碍物离散到地图像素点上?

问题一&#xff1a;如何判断一个点是否在多边形区域内&#xff1f; 方法1&#xff1a;向量叉乘判别法 设多边形的顶点依次为A1&#xff0c;A2…An&#xff0c;要判断的点为P&#xff0c;那么分别计算向量PA1叉乘向量PA2&#xff0c;向量PA2叉乘向量PA3&#xff0c;…&#xff…...

windows11使用docker部署安装minio

时间 2023-11-08 windows11使用docker部署安装minio 目录 1.docker 下载镜像2.docker安装镜像3.访问控制台4.安装问题解决5.使用教程 1.docker 下载镜像 调整镜像源到国内&#xff0c;否则会很慢 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 的描述是这样的&#xff1a; 1.1 什么是 MVC ? MVC 是 Model View C…...

flutter逆向 ACTF native app

前言 算了一下好长时间没打过CTF了,前两天看到ACTF逆向有道flutter逆向题就过来玩玩啦,花了一个下午做完了.说来也巧,我给DASCTF十月赛出的逆向题其中一道也是flutter,不过那题我难度降的相当之低啦,不知道有多少人做出来了呢~ 还原函数名 flutter逆向的一大难点就是不知道l…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...