版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leonardo_Davinci/article/details/78344224
一,放置配置文件位置一般放在 StreamingAssets下面
我的TowManager.TxT文件里面写的是
[Tow_Crystal]
#attack=10
#attackDistance=15
#attackInterval=1.5
#weaponName=Test
[Tow_Gatling]
#attack=15
#attackDistance=10
#attackInterval=4
#weaponName=Test
[Tow_Cannon]
#attack=20
#attackDistance=8
#attackInterval=1
#weaponName=Test
具体代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class Config : MonoBehaviour
{
//把towDic字典中的内容读取到项目中
// 主键 子键 子值
public static Dictionary<string, Dictionary<string, string>> towDic =
new Dictionary<string, Dictionary<string, string>>();
//按照Dictionary的写法一步一步的写
// Use this for initialization
public string path = "TowManager.txt";
//配置文件要放在Awake里面,因为要在项目运行中要保证数据要先有
void Awake()
{
//把新建的配置文件 TowManager.txt文件放到StreamingAssets目录下,之后用Combine合并路径
path = Path.Combine(Application.streamingAssetsPath, path);
//用于读取配置信息到数组里面
string[] items = File.ReadAllLines(path);
//主键
string mainKey = null;
//子键
string subKey = null;
//子值
string subValue = null;
foreach (var item in items)
{
//判断读取到的行是否为空
if (!string.IsNullOrEmpty(item))
{
item.Trim();
//如果该字符开始是"["
if (item.StartsWith("["))
{
//去除不用的字符将其作为字典的主键
mainKey = item.Substring(1,
item.Length - 2).Trim();
towDic.Add(mainKey, new Dictionary<string, string>());
print("主键为:" + mainKey);
//如果开始的符号是#
}
//如果该字符串是以“#”开始
if (item.StartsWith("#"))
{
//用=号分割 去除不用的符号 分别赋值给子键和子值
string[] main = item.Split('=');
subKey = (main[0].Substring(1, main[0].Length-1)).Trim();
subValue = main[1].Trim();
//给主键添加子建和子值
towDic[mainKey].Add(subKey, subValue);
print("子键为:" + subKey + " 子值为:" + subValue);
}
}
}
//测试输出是否正确
print(towDic["Tow_Crystal"]["attack"]);
}
}
读取配置文件
实例:给你的游戏物体配置相关的值
public abstract class TowState : MonoBehaviour {
//攻击力
// [HideInInspector]
public float attack;
//攻击距离
// [HideInInspector]
public float attackDistance;
//攻击间隔
public float attackInterval;
public void Start()
{
//主键
//由于我创建的游戏物体是 Instantiate()实例化出来的因此在获取 主键 要去掉 (Clone)这几个字符(transform.parent.parent.name.Length-7),才能保证主键的一致
//注意:在游戏场景中不能有这个物体,不然由于场景中的 游戏物体的名称 就是字典中的主键,会报 主键错误(没有匹配到)
string MainKey=transform.parent.parent.name.Substring(0,transform.parent.parent.name.Length-7);
//通过测试 通过剪切游戏名来判断是否与主键一致
print(MainKey);
//获得通过子建的key,获取相应的子值--其中(GameMessager.Instance是一个单例)
//由于通过字典得到的值是String类型的,转换为float类型
attack=float.Parse(GameMessager.instance.configFile[MainKey]["attack"]);
attackDistance = float.Parse(GameMessager.instance.configFile[MainKey]["attackDistance"]);
attackInterval = float.Parse(GameMessager.instance.configFile[MainKey]["attackInterval"]);
attackTypechange = GameMessager.instance.configFile[MainKey]["attackType"];
}
}