[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. linux下搭建SVN服务器完全手册-很强大!!!!!

    系统环境        RHEL5.4最小化安装(关iptables,关selinux) + ssh + yum 一,安装必须的软件包.        yum install subversion ( ...

  2. .net创建并安装windows服务案例

    1. 创建windows服务[引用博文]: 1. 将这个服务程序切换到设计视图2. 右击设计视图选择“添加安装程序”3. 切换到刚被添加的ProjectInstaller的设计视图4. 设置servi ...

  3. AngularJS Change Path Without Reloading

    To change path URL with AngularJS, $location.path() is passed the new URL as a parameter, and the pa ...

  4. Bootstrap 图标

    Bootstrap 图标由 Glyphicons 提供.详情可以去bootstrap官网进行查看. 用法: <i class="icon_class_name">< ...

  5. Linux下监控磁盘空间的四个命令

    无论是运行简单的Linux桌面还是大型Linux服务器,都需要了解可供应用程序使用的空间,并跟踪系统的磁盘使用情况.下面介绍四个核心命令行命令来管理Linux系统上的介质环境. 一.mount命令 m ...

  6. Xcode开发和调试总结

    Xcode是iOS开发主要的工具.IDE.关于Xcode的细枝末节,可以参考苹果的官方文档或者众多的说明.此文档主要涉及常用开发和调试注意事项,参考版本为Xcode 5.1.1. 目标设置: 在此,我 ...

  7. Linux下搭建Nginx+MySQL+PHP

    在CentOS6.3下实践通过. 1.关闭防火墙 [root@CentOS ~]# chkconfig iptables off 2.关闭selinux vi /etc/sysconfig/selin ...

  8. ASP.NET页面之间传递值的几种方式(转载)

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  9. 进程间通讯之mmap文件共享

    进程间通讯之mmap文件共享 引文: 个人名言:“同一条河里淹死两次的人,是傻子,淹死三次及三次以上的人是超人”.经历过上次悲催的面试,决定沉下心来,好好的补充一下基础知识点.本文是这一系列第一篇:进 ...

  10. 一种利用异常机制基于MVC过滤器的防止重复提交的机制分享

    防止重复提交验证机制 某些时候因为系统反应稍慢,急性子用户可能不耐烦会进行重复的提交,这个操作不仅可能造成系统负担,也可能产生垃圾数据. 出现这两种状况都是我们不希望的. 为此,在公司项目系统设计了以 ...