查看: 3229|回复: 0
打印 上一主题 下一主题

[经验分享] Unity中解析ini配置文件----INIParser

[复制链接]

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-2-8 22:13:23 |只看该作者 |倒序浏览
Ini files

这个库可处理ini文件。 请注意,该文件可以是任何扩展名(如.txt)只要 文件内容是正确格式。


[csharp] view plaincopyprint?


  • [Player]  
  • name=Arnold  
  • avatar=2  
  • ; This section stored hi-scores  
  • [Hi-score]  
  • Top1=32900  
  • Top2=12000  
  • Top3=4700  



那怎么使用这个库呢?

1. 添加 “INIParser.cs” 到 Unity.
2. 声明一个 INIParser 对象并使用它.


[csharp] view plaincopyprint?


  • INIParser ini = new INIParser();  
  • ini.Open(“C:/Test.ini”);  
  • ini.WriteValue(“Player”,“Name”,“Arnold”);  
  • ini.Close();  

多个Ini文件时


    请注意,对于每个INIParser实例,你在任何一个时间只能有一个open的ini文件,你可以打开下一个ini文件,但是之前您必须使用Close()。


[csharp] view plaincopyprint?


  • INIParser ini = new INIParser();  
  • ini.Open(“C:/Test.ini”);  
  • ini.WriteValue(“Player”,“Name”,“Arnold”);  
  • ini.WriteValue(“Hi-score”,“Top3”,1000);  
  • ini.Close();  
  • ini.Open(“C:/Test2.ini”);  
  • ini.WriteValue(“Position”,“x”,2);  
  • ini.WriteValue(“Position”,“y”,3);  
  • ini.Close();  




Methods方法

Open(string path)

Open ini_file关于 reading 和 writing. 如果这个文件不存在将被创建。. 一旦你完成了reading/writing 记得调用函数 Close( )。来保存这个ini文件的所有改变。

Open(TextAsset asset)

Open 一个 TextAsset 作为 ini_file. 如果做了任何更改,则副本将保存在Persistent Data Path持久性数据的路径下。这个函数会一直看着Persistent Data Path持久数据路径,如果有任何修改的TextAsset的副本,实际上看游戏中的文本资源包之前首先看到在Persistent Data Path持久数据路径的变化。


OpenFromString(string str)

从字符串创建ini文件和打开它用于进行读/写。正确格式化的字符串作为ini文件(即:sections部分,keys键和values值) 否则将无法正确创建ini文件。注意,这个ini文件是暂时的,只存在于内存中。但是你可以使用ToString()返回的字符串可以被保存到服务器或磁盘的完整的ini文件。


string ToString(string str)

返回完整的  ini file 字符串。


Close()

一旦你完成读取或写入任何打开的ini文件,应调用此方法。ini文件数据存储在内存中,直到调用此方法,这一数据被写入到磁盘。


string ReadValue(string section, string key, string default)

(重载: bool, int, long, double, byte[], DateTime)

从ini_file中读取值。 如果值不存在,(默认值)将被返回。


WriteValue(string section, string key, string value)
(overload: bool, int, long, double, byte[], DateTime)
写入 一个值到 ini_file

SectionDelete(string section)

删除整个ini文件的section部分,这也将删除与之关联的所有键/值对。

bool IsSectionExists(string section)

检查是否存在ini文件中的section 节。您不需要检查,以防止错误,因为如果你ReadValue从一个不存在的section 节,ReadValue将只返回默认值。然而,有时它可以是有用的如果ini文件已保存的具体数据。

KeyDelete(string section, string key)

删除被选择的  key (还有和它相关的 value) 从 ini file.中

bool IsKeyExists(string section, string key)

检查以查看是否有指定的键存在于ini文件。您不需要检查,以防止错误,因为如果你ReadValue一个不存在的节,ReadValue将只返回默认值。然而,有时它可以是有用的如果ini文件已保存的具体数据。

Open(TextAsset asset)

TextAsset 是read-only, 所以任何的修改是放在sandbox area 沙箱区域(persistentDataPath).

Example code:


[csharp] view plaincopyprint?


  • INIParser ini = new INIParser();  
  • TextAsset asset = Resource.Load("TextAssetExample") as TextAsset;  
  • ini.Open(asset);  
  • ini.WriteValue("Player","Name","Arnold");  
  • ini.Close();  



有时候,你会想使用TextAsset文本资源作为ini文件。游戏包中包含TextAsset文本资源,因此它在每个平台上的读/写操作可靠。如果你使用streaming assets流的资产作为ini文件,有时你会达到以读/写权限错误移动平台上。
你必须确保该TextAsset文本资源存在,否则任何读/写操作将不会正确工作。

Credits

library 是由STA INIFile改编而成,仿照游戏制作室INI文件系统。



Example code:

Save 和  load game data


[csharp] view plaincopyprint?


  • INIParser ini = new INIParser();  
  • // Open the save file. If the save file does not exist, INIParser automatically create  
  • // one  
  • ini.Open(Application.persistentDataPath + "save.txt");  
  • // Read the score. If the section/key does not exist, default score to 10  
  • int score = ini.ReadValue("Player","Score",10);  
  • score += 100;  
  • ini.WriteValue("Player","Score",score);  
  • ini.Close();  



在这场比赛第一次运行时,会发生什么?

这段代码从保存文件读取比分,增加100,并保存新的得分值。

Open()将检测到“save.txt”不存在,所以空白“save.txt”将被创建。 然后,分数将被读取。自从“save.txt”是空白的,分数不能在ini文件中找到,所以它默认为10。然后,新的分数的值写入ini文件。


Save 和 load game data 从 TextAsset文件中


[csharp] view plaincopyprint?


  • INIParser ini = new INIParser();  
  • TextAsset asset = Resource.Load("TextAssetExample") as TextAsset;  
  • ini.Open(asset);  
  • int score = ini.ReadValue("Player","Score",10);  
  • score += 100;  
  • ini.WriteValue("Player","Score",score);  
  • ini.Close();  




有时候,你会想使用TextAsset文本资源作为ini文件。游戏包中包含TextAsset文本资源,因此它在每个平台上的读/写操作可靠。如果你使用streaming assets流的资产作为ini文件,有时你会达到以读/写权限错误移动平台上。
你必须确保该TextAsset文本资源存在,否则任何读/写操作将不会正确工作。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-10 17:05 , Processed in 0.115829 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部