通過反射獲取資料庫的數據 將其轉化為相應類型的數據

来源:http://www.cnblogs.com/redUnity/archive/2016/01/20/5146920.html
-Advertisement-
Play Games

反射可以動態獲取數據的類型,Type 類可以獲取其中的 欄位、方法、屬性等。尤其是將欄位與屬性做區分可以讓我們可以獲取,自己想獲得的。廢話不多說上代碼。先將數據導入的類,寫下: 1 using System; 2 using UnityEngine; 3 4 namespace ARPGSimpl....


反射可以動態獲取數據的類型,Type 類可以獲取其中的 欄位、方法、屬性等。 

尤其是將欄位與屬性做區分可以讓我們可以獲取,自己想獲得的。廢話不多說上代碼。

先將數據導入的類,寫下:

 1 using System;
 2 using UnityEngine;
 3 
 4 namespace ARPGSimpleDemo.Skill
 5 {
 6     /// <summary>
 7     /// 技能數據
 8     /// </summary>
 9     [Serializable]
10     public class SkillData
11     {
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.GetProperties
18             foreach (var item in t.GetProperties())
19             {
20                 i++;
21                 //獲取屬性 判斷 是否為 string
22                 if (item.PropertyType.Equals(typeof(string)))
23                     item.SetValue(sd, skill[i].ToString(), null); //賦值
24                 //獲取屬性 判斷 是否為 float
25                 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                 else
35                     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     }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用的是VMware10.0版本的虛擬機,很早之前下載的今天就直接用了,安裝挺簡單記得需要一個序列號。在這裡:http://mirrors.163.com/ubuntu-releases/15.04/ubuntu-15.04-desktop-i386.iso 下載的ubuntu15.04ISO鏡像(....
  • at命令用於在指定時間執行命令。at允許使用一套相當複雜的指定時間的方法。它能夠接受在當天的hh:mm(小時:分鐘)式的時間指定。假如該時間已過去,那麼就放在第二天執行。當然也能夠使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的 詞語來指定時間。...
  • 我最近開發了一個winform項目,用的是access資料庫,當開發成功以後,有些電腦上就能正常運行,有些電腦就無法讀取資料庫文件,剛開始我以為是許可權問題,後來我把安裝程式卸載了,裝在其它盤中(非C盤),奇跡發生了,正常運行,但是我又在其它電腦上安裝不管是C盤還是其它盤都不行,後來我以為是電...
  • 在前面介紹了很多篇相關的《Bootstrap開發框架》的系列文章,這些內容基本上覆蓋到了我這個Bootstrap框架的各個主要方面的內容,總體來說基本達到了一個穩定的狀態,隨著時間的推移可以會引入一些更好更新的內容進行完善,本篇繼續這個系列,主要介紹如何實現Web頁面內容的列印預覽和保存操作。
  • 又發現了一個 .net 的 bug!最近在使用正則表達式的時候發現:在忽略大小寫的時候,匹配值從 0xff 到 0xffff 之間的所有字元,正則表達式竟然也能匹配兩個 ASCII 字元:i(code: 0x69) 和 I(code: 0x49);但是仍然不能匹配其他的 ASCII 字母和數字。 ....
  • 來源:http://zxlovenet.cnblogs.com在許可權分配中有多個許可權級別,不同用戶分別有多個不同的許可權。論壇的許可權:查看、發帖、投票、搜索用戶的許可權:用戶A:查看、發帖用戶B:查看用戶C:查看、發帖、投票、搜索分析:有四種不同的許可權級別,總共2^4種許可權分配方式。像這樣許可權等級劃分和...
  • 觸發器現有字典表(Dict)欄位說明Id標示ItemKey鍵ItemValue值UpperId上層標示需求一:當新增一條記錄的時候,若已存在相同鍵的,拒絕插入//操作步驟:展開相關表,右擊‘觸發器’,新建即可USE [sqlffwj]GOSET ANSI_NULLS ONGOSET QUOTED_I...
  • 1、查找空節點//*[not(text())] 表示內容為空的節點//*[count(*)=0] 表示沒有子節點的節點"//*[count(*)=0 and not(text())]" 空節點,表示既沒有內容,也沒有子節點,但未排除包含屬性的節點
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...