首页 > 学院 > 开发设计 > 正文

通过反射获取数据库的数据将其转化为相应类型的数据

2019-11-14 13:31:24
字体:
来源:转载
供稿:网友

反射可以动态获取数据的类型,Type 类可以获取其中的 字段、方法、属性等。 

尤其是将字段与属性做区分可以让我们可以获取,自己想获得的。废话不多说上代码。

先将数据导入的类,写下:

 1 using System; 2 using UnityEngine; 3  4 namespace ARPGSimpleDemo.Skill 5 { 6     /// <summary> 7     /// 技能数据 8     /// </summary> 9     [Serializable]10     public class SkillData11     {12         /// <summary>技能拥有者</summary>13         [HideInInspector]14         public GameObject Owner;15         /// <summary>技能编号</summary>16         public int skillID{set;get;}17         /// <summary>技能图标</summary>18         public string skillIcon { set;get;}19         /// <summary>描述</summary>20         public string description{set;get;}  21         /// <summary>技能名称</summary>22         public string name{set;get;}23         /// <summary>持续时间</summary>24         public float durationTime{set;get;} 25         /// <summary>在持续时间内,两次伤害之间的间隔时间</summary>26         public float damageInterval{set;get;}27         /// <summary>伤害比</summary>28         public float damage {set;get;} 29         /// <summary>冷却时间</summary>30         public int coolTime{set;get;}31         /// <summary>冷却剩余</summary>32         public int coolRemain;33         /// <summary>魔法消耗</summary>34         public int costSP{set;get;} 35         /// <summary>攻击距离</summary>36         public float attackDisntance{set;get;}  37         /// <summary>攻击目标</summary>38         [HideInInspector]39         public GameObject[] attackTargets;40         /// <summary>攻击目标的TAG</summary>41         public string[] attckTargetTags{set;get;}42         /// <summary>技能等级</summary>43         public int level{set;get;} 44         /// <summary>技能预制对象</summary>45         public GameObject skillPRefab;46         /// <summary>预制文件名</summary>47         public string prefabName{set;get;}48         /// <summary>攻击范围 线形,矩形,扇形,圆形</summary>49         public DamageMode damageMode{set;get;} 50         /// <summary>攻击类型,单攻,群攻</summary>51         public SkillAttackType  attackType{set;get;}52         /// <summary>是否激活</summary>53         public bool Activated;54         /// <summary>技能对应的动画名称 </summary>55         public string animtionName{set;get;}56         /// <summary> 攻击范围角度</summary>57         public int attackAngle{set;get;}58         /// <summary>目标受击特效</summary>59         public string hitFxName{set;get;}60         public GameObject hitFxPrefab;61         /// <summary>下一个连击技能编号</summary>62         public int nextBatterId{set;get;}63    64       }65 }

下面是获取数据  并放入 

 1     /// <summary> 2     ///数据库数据放入技能管理类中 3     /// </summary> 4     /// <param name="jobId">职业ID</param> 5     void InitSkill(int jobId) 6     { 7         //先将数据库打开 8         OperatingDB.Instance.CreateDataBase(); 9         //遍历表中所有行10         SqliteDataReader skill = OperatingDB.Instance.db.ReadFullTable("T_Skill" + jobId);11         while (skill.Read())12         {13             SkillData sd = new SkillData();14             //反射获取15             Type t = typeof(SkillData);16             int i = 0;17             //遍历SkillData所有属性 t.GetProperties18             foreach (var item in t.GetProperties())19             {20                 i++;21                 //获取属性 判断 是否为 string22                 if (item.PropertyType.Equals(typeof(string)))23                     item.SetValue(sd, skill[i].ToString(), null); //赋值24                 //获取属性 判断 是否为 float25                 else if (item.PropertyType.Equals(typeof(float)))26                     item.SetValue(sd, float.Parse(skill[i].ToString()), null);27                 //获取属性 判断 是否为 string[]28                 else if (item.PropertyType.Equals(typeof(string[])))29                 {30                     string[] str = skill[i].ToString().Split(',');31                     item.SetValue(sd, str, null);32                 }33                 //获取属性 其余 其中枚举可以与int做转换34                 else35                     item.SetValue(sd, int.Parse(skill[i].ToString()), null);36             }37             //获取物体本身的技能管理类 将得到的类传入38             GetComponent<CharacterSkillManager>().skills.Add(sd);39         }40         //关闭数据库41         OperatingDB.Instance.db.CloseSqlConnection();42     }

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表