unity3d C#之配置文件的加载

来源:互联网 发布:传奇3数据库修改无效 编辑:程序博客网 时间:2024/05/17 07:04

一,放置配置文件位置一般放在  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"];     }}



注意:如有错误,请查看你创建的角色名是否和配置文件中的角色名一致,查看你的角色名通过剪切后是否和字典中相应的主键一致,其他就没有问题了,