• [游戏开发设计]浅谈游戏开发数据系统设计(一)


      最近在参与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.通用变化类型

      具体的实现下次继续,语文是体育老师教的,语言表达能力有限,有兴趣的朋友可以留言。

      

  • 相关阅读:
    Linux CentOS完全卸载PHP
    linux下安装composer以及使用composer安装laravel
    Linux安装Composer
    2012第二届GIS制图大赛——公开课技术问题&答疑(珍贵资源哦!)(http://blog.csdn.net/arcgis_all/article/details/8216984)
    ArcMap运行时出现Runtime Error错误的解决方案
    土地用途 新的12大类
    云南省第一次全国地理国情普查信息采集(第一批) 招标中标公示
    云南省第一次全国地理国情普查信息采集(第二批)招标中标公示
    云南省第一次全国地理国情普查信息采集(第三批)招标中标公示
    C#加密算法汇总(转载)http://www.cnblogs.com/zengxiangzhan/archive/2010/01/30/1659687.html
  • 原文地址:https://www.cnblogs.com/lovepurple/p/3579016.html
Copyright © 2020-2023  润新知