[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. [翻译]初识SQL Server 2005 Reporting Services Part 4

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 4 这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇 ...

  2. CQRS架构

    CQRS架构 命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现 ...

  3. 熔断器C#实现

    关键词1:保险丝.电闸跳闸.输入密码错误3次则在指定的时间之内禁止登录 关键词2:保护性架构.防御性代码.软件可靠性 实现:https://github.com/fecktty/Circuit_Bre ...

  4. 【转】 Android用于提示等待的ProgressDialog

    原文地址:http://blog.csdn.net/wleing/article/details/6086321 为了安抚用户等待的焦急心情,我们用ProgressDialog.它的用法书上有例子,就 ...

  5. beanutils中类型转换

    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws Servl ...

  6. (转载)Log4Net 在多层项目中的使用小记

    (原创)Log4Net 在多层项目中的使用小记 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各 ...

  7. JavaScript学习--(智能社视频)

    JavaScript学习,这是智能社官网上的JS视频,讲解的挺不错的,就是没有视频的demo,在视频中附上自己编写的一些demo... 下载地址:http://pan.baidu.com/s/1cPz ...

  8. QuickWebApi2:使用Lambda方式,完成对WebApi的开发和调用-文档的生成

    续 QuickWebApi:使用Lambda方式,完成对WebApi的开发和调用 上一篇完成了主要的功能,本次修订主要重构了对接口文档的生成规范,使之可读性更佳,甚至可以作为接口文档进行发布(当然,在 ...

  9. Quartz表达式生成器

    Java版的Quartz表达式生成器,同时适用于Quartz.net(免费下载) Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2 ...

  10. CSS position overflow float 属性 详解

    position  overflow float 几个属性比较容易混淆,写一段代码详解各自具体情况: position在w3school的可能取值: 值 描述 absolute 生成绝对定位的元素,相 ...