• Unity 处理策划的 Excel


       很多时候我们需要使用策划的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("
    "[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("
    ", "").Split(";"[0]);
    38 
    39         for (int i = 1; i < lineArray.Length; i++)
    40         {
    41             string[] Values = lineArray[i].Replace("
    ", "").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 }
  • 相关阅读:
    MySQL information_schema
    Sqlmap入门
    MySQL UNION
    Order by 1
    yum安装软件时,提示No package netstat available.的解决方法
    Centos7查看端口占用
    查看Centos版本
    Linux非交互方式设置密码
    Hive中的用户自定义函数
    Dbeaver连接Hive和Mysql的配置
  • 原文地址:https://www.cnblogs.com/chongxin/p/4454232.html
Copyright © 2020-2023  润新知