码迷,mamicode.com
首页 > 编程语言 > 详细

Unity 处理策划的 Excel

时间:2015-04-24 20:50:09      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

   很多时候我们需要使用策划的Excel表来做游戏的静态数据配置, 而不是采用自己定义的xml或者U3D的scriptobject。

   因为很多数据都是策划处理的,而策划最喜欢的就是excel,也只会用这个。如果不用excel,意味着数据需要你自己输入,纯属浪费时间。

   所以很多时间我们和策划约定好VO类的字段,直接从Excel映射出VO类。

   

   比如下面的这张表

技术分享

另存为.csv 然后转换为.txt 注意编码都改为UTF-8 

技术分享

技术分享

 

做好配置文件后,VO类映射就可以了,举个例子:

Vo 类

 1     public class HeroVo
 2     {
 3         public int heroId;
 4 
 5         public string heroName;///武将名称
 6 
 7         //public int heroStar;///品质
 8         public int bingZhongId;///职业
 9 
10         public string heroIcon;///icon(头像)
11 
12         public string heroFace;///face(形象)
13 
14         public string heroDescription;///描述
15 
16         public float hp;
17 
18         public float grownHp;
19 
20         public float attack;
21 
22         public float grownAttack;
23 
24         public float defense;
25 
26         public float grownDefense;
27 
28         public float luckRate; /// 暴击率
29 
30         public float missRate;///闪避
31 
32         public int skill1_Id;
33 
34         public int skill2_Id;
35 
36         public HeroVo (Dictionary<string,string> paramters)
37         {
38             FieldInfo[] fields = this.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
39 
40             foreach (var item in paramters.Keys)
41             {
42                 FieldInfo[] curfields =  fields.Where(t => t.Name == item).ToArray();
43                 
44                 if (curfields != null && curfields.Length == 1)
45                 {
46                     //Debug.Log("key:" + item + "value:" + paramters[item]);
47 
48                     FieldInfo curField = curfields[0];
49 
50                     if (curField.FieldType == typeof(int))
51                     {
52                         curField.SetValue(this, int.Parse(paramters[item]));
53                     }
54                     else if (curField.FieldType == typeof(string))
55                     {
56                         curField.SetValue(this, paramters[item]);
57                     }
58                     else if (curField.FieldType == typeof(float))
59                     {
60                         curField.SetValue(this, float.Parse(paramters[item]));
61                     }
62                 }
63             }
64         }
65 
66 
67         public override string ToString()
68         {
69             StringBuilder builder = new StringBuilder();
70 
71             FieldInfo[] fields = this.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
72             foreach (var item in fields)
73             {
74                 builder.Append(" " + item.Name + " : " + item.GetValue(this) + " ");
75             }
76 
77             return builder.ToString();
78         }
79     }

 

Vo 类集合解析

 1 public class StaticHeroDataPool
 2 {
 3     public static string ResourceDataPath = "battle/Data/Hero/StaticHeroDataModel";
 4 
 5     public List<HeroVo> heros = new List<HeroVo>();
 6 
 7     static StaticHeroDataPool _instatnce = null;
 8     public static StaticHeroDataPool Instatnce
 9     {
10         get
11         {
12             if (_instatnce == null)
13             {
14                 _instatnce = new StaticHeroDataPool();
15 
16                 _instatnce.AddData(LoadData(ResourceDataPath));
17             }
18             return _instatnce;
19         }
20     }
21 
22     private static string[] LoadData(string loadUrl)
23     {
24         TextAsset binAsset = Resources.Load(loadUrl, typeof(TextAsset)) as TextAsset;
25         
26         string[] lineArray = binAsset.text.Split("\n"[0]);
27       
28         /// 去掉最后一空行
29         int length = lineArray.Length;
30         string[] newlineArray = lineArray.Where((t, index) => (index < length - 1)).ToArray();
31 
32         return newlineArray;
33     }
34 
35     private void AddData(string[] lineArray)
36     {
37         string[] fieldNames = lineArray[0].Replace("\r", "").Split(";"[0]);
38 
39         for (int i = 1; i < lineArray.Length; i++)
40         {
41             string[] Values = lineArray[i].Replace("\r", "").Split(";"[0]);
42 
43             Dictionary<string, string> paramters = new Dictionary<string, string>();
44             for (int j = 0; j < fieldNames.Length; j++)
45             {
46                 paramters.Add(fieldNames[j], Values[j]);
47             }
48 
49             HeroVo heroVo = new HeroVo(paramters);
50             heros.Add(heroVo);
51         }
52     }
53 }

 

Unity 处理策划的 Excel

标签:

原文地址:http://www.cnblogs.com/chongxin/p/4454232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!