2012年6月7日
19:31
星际2的编辑器相对于魔兽3最大的改进就是数据编辑器了, 也正是这个改变, 让很多有兴趣自制地图的人放弃了这个想法. 为什么呢? 因为它太复杂了, 而且资料很少, 所以上手难度比较大. 但是一旦你学会了它, 你就会喜欢上这种编辑方式. 这个编辑器背后的实现原理, 也是非常值得程序员们去好好探索和借鉴的.
星际2中, 很多功能都是可以使用数据编辑器去"配置"出来的, 这就是数据驱动的魅力. 有些时候, 它甚至可以取代脚本. 比如我做白虎这个英雄就没有写一行脚本代码, 完全是用数据编辑器的各种对象组合出来的.
下面我以DOTA中的白虎为例, 说明一下数据编辑器的技能制作思路 (这里不做100%的复刻, 只是为了学习编辑器, 做出演示效果).
注:这篇文章需要有数据编辑器的基础, 这个不是入门教程.
对象类型
星际2就对象有很多类型, 这里只说一下比较常见的. 这些类型还有子类型, 对象的实例之间是可以进行数据拷贝和派生的.
Units(单位)
大多数人应该知道Unit是个什么东西, 因为它就是个东西的意思. 一个兵是Unit, 建筑也是, 子弹也是. 这个类型里你可以找到Unit的生命值, 能量值, 护盾值等. 所有可见的部分并不在Unit里, 而在对应的Actor里.
Abilities(能力)
Ability就是一个Unit可以干什么. 攻击, 移动, 建造之类都是Ability. 在这里你可以找到能量消耗值, 用到的Button, 范围和产生的Effect. Effect -Target提供一个可以选择目标的鼠标指针, 选择后Effect就在目标点启动.
Effects(效果)
Effect是让一件事情发生. 它是Aiblity幕后的实现, 可以增加Buff, 产生伤害, 治疗单位等.
比如"Apply Behavior"类型应用一个Behavior(一般是一个Buff) 到一个Unit, "Damage"类型对一个Unit产生伤害, "Search"在一个区域内搜索Unit并施加一个Effect, "Set"类型把多个Effect组合成一个.
Behaviors(行为)
Behavior有很多类型, 最常见的应该是"Buff". 就像你想得那样, 它会附加到一个Unit上并影响它, 比如加速, 禁用武器, 抵挡伤害等.
Buttons(按钮)
前面我说了Button是干什么的了. 在游戏里你有一个命令面板(右下角), 每个按钮都对应一个Button对象, 描述它的图标, 提示信息, 快捷键和名字.
Actors(演员)
这是个复杂又重要的东西, 它表示所有你能看到的玩意儿. 如模型, 网格, 生命条, 选择范围等. 没有Actor的Unit会显示成一个白球.
Actor是新手觉得最棘手的, 它有一个Events字段关联到一个事件触发器. 在我的一张地图里我用Actor的Events来实现单位获得一个Behavior后变色的功能.
如果我想做一个AOE技能, 加速所有范围内的单位15秒. 你能猜出来这些类型是怎么联系起来的吗?
我会做一个Ability(当然配个Button). 这个Ability是Effect - Target类型, 它的Effect是一个Search Effect, 搜索指定目标半径内的友军. 每个搜索到的Unit都会施加一个Effect("Apply Behavior"类型), 这个Effect会施加一个自定义的"Buff"类型的Behavior, 它的功能就是增加额外的移动速度.
属性
DOTA中, 核心就是属性. 属性决定了英雄的类型, 装备的效果, 英雄的玩法等. 但是星际2中并没有力量/敏捷/智力这样的属性, 所以需要自己实现.
前面说了, 影响Unit的是Behavior, 所以这些属性就用Behavior的字类型Attribute来实现, 在Modification字段中就可以设置影响Unit的哪些数据了:
比如力量加19生命值, 敏捷加1攻击, 智力加13的能量值(相当于魔兽3中的魔法值)
等级
DOTA中等级是非常重要的, 因为等级的增长会带来属性的增长, 而属性又是整个DOTA的核心. Behavior有一个子类型Veterancy, 就是做升级的, 在这里可以设置每级需要多少经验, 改变什么数据等
比如这里我设置了1级需要25经验, 2级需要35, 3级45, 每级增加2点力量, 3点敏捷, 1点智力
当然, 升级特效什么的, 是加个Actor, 让它监听等级改变的事件来播放
单位
快速创建一个单位的方法就以已有的一个单位为模板进行复制, 然后去掉自己不需要的, 定制自己想要的功能. 在这里我使用Karass做为一个模板, 因为它是一个远程攻击单位, 不需要我再自己去做Weapon, 只需要替换一下Actor中关联的Model资源什么的就好了. Unit有个Behaviors字段, 上面我们实现的都可以加进去, 然后进游戏攻击敌方单位就可以升级了
技能
每个Ability需要关联一个Button, 并在Unit里加到命令面板上才能在游戏中使用
群星坠落
月神之箭
跳跃
月之暗面