201267

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, 345, 每级增加2点力量, 3点敏捷, 1点智力

当然, 升级特效什么的, 是加个Actor, 让它监听等级改变的事件来播放

单位

快速创建一个单位的方法就以已有的一个单位为模板进行复制, 然后去掉自己不需要的, 定制自己想要的功能. 在这里我使用Karass做为一个模板, 因为它是一个远程攻击单位, 不需要我再自己去做Weapon, 只需要替换一下Actor中关联的Model资源什么的就好了. Unit有个Behaviors字段, 上面我们实现的都可以加进去, 然后进游戏攻击敌方单位就可以升级了

技能

每个Ability需要关联一个Button, 并在Unit里加到命令面板上才能在游戏中使用

群星坠落

  • 功能

    • 召唤陨石对周围600范围内的敌方单位造成伤害
  • 思路

    • 这个技能是没有目标的, 所以使用Effect - InstantAbility子类型
    • 使用Search Area(Effect)搜索指定半径, 施加伤害Starfall (Damage)效果

  • 陨石就是一个可视化的Actor, 只做纯表现. 类型使用BuffOneShot就是播放完了自己销毁. 创建通过监听Starfall(Damage)事件来实现

月神之箭

  • 功能

    • 以致命的精确性向一个地点射出一箭,箭矢带有视野,对触及的第一个敌方单位造成伤害并晕眩
  • 思路

    • 这个技能需要选择一个目标点做为方向, 所以使用Effect - Target类型的Ability
    • 射箭
      • 由于不能以选择的目标点做为箭的终点, 所以需要创建一个代理Effect, 加上一定的偏移(比如50)做为目标点, 把箭发射出去
    • 飞行

      • 箭一个Missile单位, 需要制作相应的UnitActor对象
      • Unit的移动是通过Mover来控制的, 这里可以设置成朝一个方向不停地飞
      • 飞行过程中箭上有一个周期性触发的Buff, 这个BuffEffect是一个Search Area的类型, 检测周围很小范围内有没有敌方单位
    • 中箭

      • 中箭就是Search Area类型Effect的施加的一个效果集合: 产生伤害 + 自杀(箭消失)
      • 中箭的可视化效果是一个Actor, 通过监听Damage效果事件来创建
      • 这里眩晕效果我没做, 应该是施加到目标上一个Buff来实现

跳跃

  • 功能: 月之女祭司的坐骑向前跳跃,坐骑在落地后的咆哮形成一个作用范围为800持续10秒的光环,提升其中的友方英雄的攻击速度和移动速度
  • 思路
    • 这个技能也是不需要目标点的, 所以使用Effect - Instant类型
    • 跳跃需要控制Unit的移动路径, 这个用脚本更容易实现. 但是使用数据编辑器也有一种方法来实现: Missile(飞弹)
    • 做一个长得跟英雄一模一样的Missile, 发射出去, 路径使用Mover控制, 发射过程中把英雄隐藏, Missile到达后再把英雄移到目标点显示出来
    • 目标点的效果是搜索周围友军英雄, 施加一个加速Buff
    • 中间有一些细节, 比较跳跃过程中需要禁用操作, 禁用碰撞等

月之暗面

  • 功能: 以夜色掩护自己和其他所有友方英雄,进入隐身状态
  • 思路
    • 这个比较简单, 直接施加一个隐身Buff就行了

星际2中复刻DOTA白虎相关推荐

  1. 为什么要在游戏中复刻现实?我们能获得怎样的乐趣?

    一个以表达现实为诉求的游戏该如何保留其游戏性? 一个让我痛苦的游戏 想写这篇文章的缘起是最近玩了一款叫做<星礼研究所>的游戏. 这款游戏是制作者的处女作,刚上架 Steam 就被称为&qu ...

  2. 在Unity中复刻《海岛奇兵》海水渲染

    周末花了一天时间在Unity中复刻了一下<海岛奇兵>海岛场景海水的渲染效果,先上目前复刻的效果图: 总体上还原了海水深度.海面波光.海水流动.海岸泡沫的效果. 复刻的思路其实就是拿Adre ...

  3. [MAUI]在.NET MAUI中复刻苹果Cover Flow

    文章目录 原理 3D旋转 平行变换 创建3D变换控件 绘制封面图片 应用3D旋转 应用平行变换 绘制倒影 创建绑定属性 创建绑定数据 创建布局 计算位置 计算3D旋转 创建动效 项目地址 Cover ...

  4. 韩国的计算机科学家,韩国科学技术院用普通相机为AR/VR复刻真实世界物理对象...

    只需一个包含闪光灯的相机/摄像头 (映维网 2018年12月10日)为虚拟环境捕捉和复刻逼真的现实世界对象十分复杂,而且耗时.所以,从移动设备和数码相机,你能想象只通过一个包含内置闪光灯的传统相机来简 ...

  5. vscode php调试插件,构建VSCode开发调试环境(强大且实用的插件推荐)

    随着VSCode的不断完善和强大,是时候将部分开发迁移到VS Code中了. 目前使用VS2019开发.NET Core应用,一直有一个想法,在VS Code中复刻VS的开发环境,同时迁移到VS Co ...

  6. 硅谷对“元宇宙”一无所知

    作者 | Michael Pusateri 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 近来,硅谷大肆宣传"元宇宙"的概念,但这些宣传基本上都是博眼球的无稽之谈. ...

  7. 《JS学习》Object对象

    介绍 JavaScript中的对象其实就是一组数据和功能的集合. 通过new操作符后跟要创建的对象类型的名称来创建. ​ new: ​ 从指定模具中复刻出一个一模一样的空间,此空间与外界隔离,视为实例 ...

  8. 空之轨迹手游服务器维护,空之轨迹7月9日临时维护公告_空之轨迹7月9日更新了什么_玩游戏网...

    <空之轨迹>6月1日更新公告 在空之轨迹手游中6月1日究竟更新了什么呢?在空之轨迹手游中布莱特一家卡池将会正式开启哦!想了解的小伙伴们,下面就让我们一起来看一下吧!亲爱的各位游击士:< ...

  9. 元宇宙下的商人、小说家和“钢铁侠”

    文/赵家禾 元宇宙可谓是近段时间来最火热的概念,但总是语出惊人的马斯克,前两天却"取笑"了元宇宙. 12月22日,马斯克在一场访谈中表示他完全不看好扎克伯格所引领的元宇宙,目前只是 ...

最新文章

  1. PHP读取excel表格内容 PHP-ExcelReader
  2. 12C OCP 1ZO-071 题库(8月以前)
  3. 科大讯飞语音助手Lite智能鼠标电脑版安装不成功为什么?怎么办?
  4. c3p0 mysql 连接池配置文件_数据库连接池c3p0的使用
  5. 关于MySQL出现锁等待lock wait timeout exceeded; try restarting transaction 的解决方案
  6. 运营系统的前世今生(1)
  7. Cow Contest POJ - 3660
  8. 通过smack client + openfire server 实现 peer to peer communication
  9. insertion-sort-list——链表、插入排序、链表插入
  10. 95-190-440-源码-window-Trigger-Trigger简介
  11. 分享20佳移动应用程序开发框架
  12. 公众号排版文章批量导出-免费公众号文章批量导出排版
  13. CSS国际化loader - 国际化图片,中东区域适配
  14. 用递归调用函数来把存在父子级别的数据封装成一个树状结构
  15. PowerBuilder fileOpen()
  16. 信捷PLC跟西门子700IE通信
  17. LA 4490 Help Bubu
  18. web表格制作--11.27
  19. 并发和并行以及线程安全
  20. Hadoop3.x学习教程(二)

热门文章

  1. 自己搭建安卓app结合苹果CMS后台视频管理
  2. tensorboard 2.0可视化 —浏览器中输入http://ip:6006 - 无法访问此网站——有效解决
  3. C# 调试应用提示“无法访问此网站”问题的处理(图文)
  4. python 异常学习1
  5. 软件工程计算机水平 推荐表,软件工程就业推荐表2014届.doc
  6. 【创业】产品开发:什么是敏捷产品开发?
  7. php csv文件转json,php csv如何转json
  8. 闲聊人工智能产品经理(AIPM)—方法论
  9. 淘宝关键词搜索采集商品价格销量接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集精准商品数据接口)接口代码对接流程
  10. java实现找一条转乘次数最少的公交线路?,基于最优换乘次数的城市公交查询算法...