ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-27 23:04:53  阅读:184  来源: 互联网

标签:游戏 浅谈 id 物品 uint 数据系统 public 属性


原文链接:http://www.cnblogs.com/lovepurple/p/3579016.html

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

 

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

  

转载于:https://www.cnblogs.com/lovepurple/p/3579016.html

标签:游戏,浅谈,id,物品,uint,数据系统,public,属性
来源: https://blog.csdn.net/weixin_30305735/article/details/97567466

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有