自定义配置文件的使用及加载-txt
[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的更多相关文章
- vue2 自定义全局组件(Loading加载效果)
vue2 自定义全局组件(Loading加载效果) github地址: https://github.com/ccyinghua/custom-global-component 一.构建项目 vue ...
- Spring Boot新增一个YML配置文件,并进行加载
我们在同级目录下增加 然后增加一个配置类 SpringBootConfiguration.java import org.springframework.beans.factory.config.Ya ...
- 自定义view实现阻尼效果的加载动画
效果: > 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减 ...
- SpringBoot中各配置文件的优先级及加载顺序
我们在写程序的时候会碰到各种环境(开发.测试.生产),因而,在我们切换环境的时候,我们需要手工切换配置文件的内容.这大大的加大了运维人员的负担,同时会带来一定的安全隐患. 为此,为了能更合理地重写各属 ...
- struts2:struts.properties配置文件介绍及常量加载顺序
1. 背景 struts2框架中有两个核心配置文件,其中struts.xml文件主要负责管理应用中的action映射,以及该action包含的result定义等.除此之外,struts2框架还包括一个 ...
- 自定义动画(仿Win10加载动画)
一.源代码 源代码及demo 二.背景 先看看Win10的加载动画(找了很久才找到): CPA推广甲爪广告联盟满30日结 [点击进入] 甲爪广告联盟,提供各类高单价CPA广告 单价高 收益好 日付广告 ...
- Android中自定义ListView实现上拉加载更多和下拉刷新
ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- Vue自定义指令实现下拉加载:v-loadmore
和methods平级: directives: { loadmore: {//自定义指令: 下拉加载 bind(el, binding) { var p = 0; var t = 0; ...
随机推荐
- VS2010新建Web网站与新建Web应用程序的区别
在Visual Studio 2010中,除了可以使用“创建Web应用程序”的方式来构建自己的Web项目之外,还可以通过创建“Web网站”的方式来构建Web项其中,Web网站的创建方法:打开Visua ...
- 【工作笔记四】去掉a标签超链接的虚线框的方法
a{ blr:expression(this.onFocus=this.blur()); /* IE Opera */ outline:none; /* FF Opera */ } a:focus{ ...
- JAVA开发语言基础
很多时候我们都不知道,为什么android最开始要用java作为基础语言 看看知乎上都是怎么回答的 为什么java最初成为android开发的基础语言 ------------------------ ...
- ps入门教程:选择工具、移动工具、索套工具的使用
本节课程主要内容:1.学习矩形选择工具.椭圆选择工具.移动工具.多边形套索工具.套索工具.磁性套索工具和魔术 棒选择工具.2.用套索和磁性套索,实现对人物照片的抠图.----------------- ...
- java加载配置文件的三种方式
比如我们要加载db.properties文件 如图: 比如我们要加载source目录下的db.properties文件.就有以下几种方式 第一种是文件io流: public static void l ...
- 领域驱动设计(DDD)的实际应用
领域驱动设计(DDD)的实际应用 笔者先前参与了一个有关汽车信息的网站开发,用于显示不同品牌的汽车的信息,包括车型,发动机型号,车身尺寸和汽车报价等信息.在建模时,我们只需要创建名为Car的实体( ...
- url路径
/:表示根目录(最原始开头的那个目录): ~/:表示虚拟站点根目录: ../:表示上级目录(当前目录的上一级),相当于在当前目录按了一次后退键: ../../:表示上上级目录: ./:当前目录(当 ...
- js 获取某年的某天是第几周
/** * 判断年份是否为润年 * * @param {Number} year */ function isLeapYear(year) { return (year % 400 == 0) || ...
- window.parent与window.opener的区别
有这样一个需求,弹出一个新窗口 并从该新页面的select选择框中选择需要的类别,再返回到之前的父窗口页面的某个文本框中.这里就要用到window.parent和window.opener 如题两种方 ...
- hdu1686
题目意思:找到上串在下串中有多少个 Problem Description The French author Georges Perec (1936–1982) once wrote a book, ...