unity3d C#之配置文件的加载

版权声明:本文为博主原创文章,未经博主允许不得转载。 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"]; 
    }
}



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





 
 

猜你喜欢

转载自blog.csdn.net/leonardo_Davinci/article/details/78344224