[游戲開發設計]淺談游戲開發數據系統設計(一)


  最近在參與Unity游戲的客戶端開發,總結下整理游戲數據系統的構建及簡單的設計。

  客戶端采用C#進行開發,C#托管語言在一定程度上大大減輕了程序員關於內存分配釋放的問題。

  整個客戶端是由 數據+邏輯+渲染 組成的,而整個游戲的核心是由數據驅動的,游戲可以沒有渲染,但不能沒有數據及邏輯。這里簡單闡述一下關於整個游戲數據系統的設計,歡迎拍磚。

  背景:

    比如要構建出一個物品對象,物品有3個屬性,分別是 物品id,物品類型,物品名稱,當然這完全不夠,現在這個物品用於表示他是一個武器,提供了增加攻擊力的屬性,在傳統思路中需要有一個Item類,如下

 1 public class Item
 2 {
 3     private uint m_id;                //物品id
 4     private string m_itemName;        //物品名稱
 5     private uint m_itemType;        //物品類型
 6 
 7     public uint m_id
 8     {
 9         get {return m_id;}
10         set {m_id = value;}
11     }
12 
13     public string ItemName
14     {
15         get {return m_itemName;}
16         set {m_itemName = value;}
17     }
18 
19     public uint ItemType
20     {
21         get{return m_itemType;}
22         set {m_itemType = value;}
23     }
24 }

  武器也屬於物品類,可以繼承至Item,如下  

 1 public class Weapon:Item
 2 {
 3     private uint m_physicAttack;
 4 
 5     public uint PhysicAttack
 6     {
 7         get {return m_physicAttack;} 
 8         set {m_physicAttack = value;}
 9     }
10 }

現在問題來了,如果物品多一個屬性 如果是公共屬性直接在item里添加成員變量,並構造成屬性暴露到外部,提供外部訪問及設置值,但種類非常多,在程序里需要添加大量的成員變量,之后還得去控制相應每個成員之間的邏輯關系,而且有的數據要於服務器同步,久而久之,系統會非常臃腫,非常難維護,導致整個游戲開發難度越來越大。

  因此這里提出並設計了一套動態屬性(Dynamic Property)的設計思想,將對象與屬性之前的聯系大大減少,非常靈活,動態屬性這套思想是參考CEGUI中的設計思路。

  動態屬性系統,把數據及屬性盡最大的能力去依賴策划的配置,只把需要持久化的數據與服務器進行同步,這樣也大大減少也游戲的網絡通訊流量問題,在添加和減少屬性時,程序不需要去關心多了哪個屬性或減少了哪個屬性,整個過程都是自動的。

  動態屬性的核心是每個數據對象繼承一個Dictionary,里面保存着屬性名及屬性的值。

  動態屬性的組成:

    1.屬性模板配置表

    2.屬性模板對象

    3.屬性工廠

    4.屬性對象

    5.通用數據類型

    6.公式計算

    7.屬性集對象

    8.通用變化類型

 

  具體的實現下次繼續,語文是體育老師教的,語言表達能力有限,有興趣的朋友可以留言。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM