[Game]
Version=1 [Login]
Account = 阿斗阿斯顿撒
Password =我去饿我去恶趣味
Success = 成哥
Faild = 失败 [Job]
Job1 = 战士
Job2 = 法师
Description1=" 打算大苏打实打实的武器恶趣味请问
Description2=" 相册任务认为仍然显得十分的是
weapon1= 砍刀
weapon2= 发张 [Money]
Gold = 1234
Diamond = 11.2 [Scene]
LoadFaild = 加载失败

  txt信息

工具类

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System; public static class Configuration { //配置信息得数据结构--字典
private static Dictionary<string,Dictionary<string,string>> dicConfig = new Dictionary<string, Dictionary<string, string>>();
private static WWW www;
//是否加载结束
public static bool IsDone
{
//检测是否加载结束
get
{
if (www != null && www.isDone && string.IsNullOrEmpty(www.error))
{
BuildDictionary(www.text);
return true;
}
return false;
}
}
/// <summary>
/// 加载配置信息
/// </summary>
public static void LoadConfig()
{
string config = "file://" + Application.streamingAssetsPath + "/config.txt";
if (www == null) {
#if UNITY_ANDROID
config="jar:"+config;
#endif
www = new WWW(config);
}
}
//对外提供提取配置项得接口
public static string GetString(string mainKey, string subKey)
{
return Get(mainKey, subKey);
}
public static int GetInt(string mainKey, string subKey)
{
string value= Get(mainKey, subKey);
return value!= null ? int.Parse(value) : ;
}
public static float GetFloat(string mainKey, string subKey)
{
string value = Get(mainKey, subKey);
return value != null ? float.Parse(value) : ;
}
private static string Get(string mainKey, string subKey)
{
if(dicConfig.ContainsKey(mainKey) && dicConfig[mainKey].ContainsKey(subKey))
{
return dicConfig[mainKey][subKey];
}
return null;
} //将配置信息在内存中形成数据结构
private static void BuildDictionary(string configText)
{
//逐行读取配置信息
StringReader reader = new StringReader(configText);
string line = null;
string mainKey = null;
string subKey = null;
string subValue = null; while((line=reader.ReadLine())!=null)
{
line= line.Trim();
if (!string.IsNullOrEmpty(line))
{
//检测是否是主键
if(line.StartsWith("[")) //如果是主键
{
//取得[]中的文本内容
mainKey=line.Substring(, line.IndexOf("]") - );
dicConfig.Add(mainKey,new Dictionary<string, string>());
}
else //子键
{
var configKeyValue= line.Split(new char[] {'='},StringSplitOptions.RemoveEmptyEntries);
subKey= configKeyValue[].Trim();
subValue = configKeyValue[].Trim();
subValue= subValue.StartsWith("\"")? subValue.Substring():subValue;
dicConfig[mainKey].Add(subKey, subValue);
}
}
}
}
}

测试类

using UnityEngine;
using System.Collections; public class LoadConfigTest : MonoBehaviour { // Use this for initialization
IEnumerator Start () { Configuration.LoadConfig();
while (!Configuration.IsDone)
yield return null; print(Configuration.GetString("Job", "Job1"));
print(Configuration.GetString("Job","Job2")); print(Configuration.GetInt("Money", "Gold"));
print(Configuration.GetFloat("Money", "Diamond"));
} }

自定义配置文件的使用及加载-txt的更多相关文章

  1. vue2 自定义全局组件(Loading加载效果)

    vue2 自定义全局组件(Loading加载效果) github地址: https://github.com/ccyinghua/custom-global-component 一.构建项目 vue ...

  2. Spring Boot新增一个YML配置文件,并进行加载

    我们在同级目录下增加 然后增加一个配置类 SpringBootConfiguration.java import org.springframework.beans.factory.config.Ya ...

  3. 自定义view实现阻尼效果的加载动画

    效果: > 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减 ...

  4. SpringBoot中各配置文件的优先级及加载顺序

    我们在写程序的时候会碰到各种环境(开发.测试.生产),因而,在我们切换环境的时候,我们需要手工切换配置文件的内容.这大大的加大了运维人员的负担,同时会带来一定的安全隐患. 为此,为了能更合理地重写各属 ...

  5. struts2:struts.properties配置文件介绍及常量加载顺序

    1. 背景 struts2框架中有两个核心配置文件,其中struts.xml文件主要负责管理应用中的action映射,以及该action包含的result定义等.除此之外,struts2框架还包括一个 ...

  6. 自定义动画(仿Win10加载动画)

    一.源代码 源代码及demo 二.背景 先看看Win10的加载动画(找了很久才找到): CPA推广甲爪广告联盟满30日结 [点击进入] 甲爪广告联盟,提供各类高单价CPA广告 单价高 收益好 日付广告 ...

  7. Android中自定义ListView实现上拉加载更多和下拉刷新

    ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...

  8. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

    1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置  1.命令行参数 所有的配置都可以在命令行上进行指定 ...

  9. Vue自定义指令实现下拉加载:v-loadmore

    和methods平级: directives: { loadmore: {//自定义指令: 下拉加载 bind(el, binding) {    var p = 0;    var t = 0;  ...

随机推荐

  1. WebService和AngularJS实现模糊过滤查询

    WebService和AngularJS实现模糊过滤查询   [概要] 网上看到一个不错的帖子,用WebService获取json,然后在前端使用AngularJs进行过滤搜索,看完文章后,按自己的想 ...

  2. The Decoder - UVa458

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva458.html 题目描述  The ...

  3. 如何使用MacVim

    如何使用MacVim 如何使用MacVim 如何使用MacVim呢? 命令模式 按下ESC 高效率移动 1.在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就 ...

  4. [转]SVN操作手册

    [转]SVN操作手册 2012-04-28 11:26 by NewSea, 2495 阅读, 0 评论, 收藏, 编辑 原文: http://hi.baidu.com/caiqiupeng/blog ...

  5. 【又长见识了】函数传参,params参数,ref和out参数详解

    一.原来函数这样传参 先看一个函数和函数调用. static void Main(string[] args) { ; Test(num);//局部变量在使用之前赋值 //Test(10); //直接 ...

  6. C add

    C++学习--应用篇(Windows/Linux)(书籍推荐及分享) 我将以平台划分,分别介绍Windows和Linux下个人认为的好书(与基础篇一样,大部分网络上都有电子版): 对于C++基础类的图 ...

  7. 对类sizeof的时候

    sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么? #include<stdio.h> #include<string.h& ...

  8. nginx开启后主机无法访问虚拟机的nginx解决方案

    如果IP可以通的话 一般是防火墙引起 方法1.cat /etc/sysconfig/iptables # Generated by iptables-save v1. :: *filter :INPU ...

  9. Select * 一定不走索引是否正确?

    Select * 一定不走索引是否正确? 走索引指的是:SQL语句的执行计划用到了1.聚集索引查找  2.索引查找  ,并且查询语句中需要有where子句 根据where子句的过滤条件,去聚集索引或非 ...

  10. JUnit java单元测试

    首先须导入JUnit包:所在项目右击->Build Path->Add Libraries->选择JUnit->选择一个版本->Finish 一.手动生成 1.测试方法, ...