标签:分析 unit www use 意思 targe article 理解 logic
最近一直在想设计一个易扩展的,可配置的技能系统框架。看了几个项目源码,可能自己功力不够,感觉类与类之间的套用很混乱,看的云里雾里的,然后网上到处找资料。
对两个技能设计比较感兴趣,一个是Dota2
http://moddota.com/forums/discussion/14/datadriven-ability-breakdown-documentation
一个是星际2
https://www.sc2mapster.com/wiki/galaxy/data/
目前先重点关注下星际2的技能系统,由于没有资料介绍,只能通过星际2的地图编辑器去揣测。
星际2的数据为树状结构
星际2的整个数据对象都是通过XML进行配置的
星际2按照上图对数据对象进行了分类
游戏相关数据对象
战役相关数据对象
演算器数据对象
美术和声音数据对象
地形数据对象
英雄
界面
高级
貌似都把星际2的技能系统称为ABE(Ability, Behavior, Effect)。
Ability(技能)
技能的基础数据,比如名字,ID,消耗等。
Effect(效果)
技能所产生的效果,比如造成伤害,星际2的Effect与动画,特效,音效等是没有关系的,它是负责逻辑运算,所有的动画,特效都是在Actor里面进行处理。
效果又可以生成效果或行为,所以效果也是个树状结构。
如:灵能风暴的效果会持续几秒钟的时间,并且会在某一地区搜索单位时周期性的产生另外一个效果。这个搜索效果会产生在每个单位身上并造成伤害。
Behavior(行为)
效果所产生的行为,比如BUFF
人族机枪兵,有移动,停止,攻击及兴奋剂四个技能,对应类图如下
技能的虚基类,所有技能类都派生于它
属性
Name: 技能名称
SetId:唯一标识
Alignment:技能瞄准对象
TechPlayer:科技玩家
TechAliasArray:科技别名
SharedFlags:共享标签
XML定义
移动技能基类
CmdButtonArray:技能按钮的值,关联CButton对象
FleeRange:当遭遇敌人攻击但又无法还击时,单位将逃跑的距离
FleeTime:单位逃离单次攻击时将会花费的最大时间
FllowAcquireRange:跟随搜索范围
FllowRangeSlop:跟随距离
MinPatrolDistance:最小巡逻距离
XML定义
实体类
移动实体类,根节点为继承的基类名, ID为实体类名
停止技能基类
属性
XML定义
实体类
攻击技能基类
属性
MinAttackSpeedMultiplier:使用该技能后攻击速度提高的最小倍数。
MaxAttackSpeedMultiplier:使用该技能后攻击速度提高的最大倍数。
CmdButtonArray:技能的特定命令相关的数据
AcquireFilters:定义拥有该技能的单位可以自己获取的目标类型
AcquirePriority:当一个以上的同单位技能尝试自动获取目标时,返回最高的“获取有限级”的技能会最先有机会潜在目标。不会获取目标的技能应将之设为0。该值被设为0的技能不会获取目标。
SmartFilters:这些类型对象能被攻击
XML定义
实体类
用CAbilMove举例
上图中重名文件是因为包含在不同的XML文件中,可以理解为存在与不同的类库里
每个对象除了基本的属性外,还可以挂载其他的模组,如按钮,单位,验证器等,基类挂载了按钮
实体类挂载了单位,验证器,移动器,移动器包含了飞行和地面两个
可以推算出其逻辑为
1.用户点击Move按钮
2.Move按钮找到当前单位的CMoveAbil
3.Move实体类找到对应的CMover
4.CMover根据Move实体类及单位的属性执行单位移动
类似于MVC模式
View(CButton)
Model(CAbil)
Controller(CMover)
标签:分析 unit www use 意思 targe article 理解 logic
原文地址:http://www.cnblogs.com/colourstar/p/7879044.html