跳到主要内容

2023年8月24日星火编辑器更新日志

法球系统

为了令用户能够更加容易地实现Moba类游戏的机制,星火编辑器实装了法球系统作为本次更新的重头戏。这一系统将能涵盖《魔兽争霸3》、《星际争霸2》、《风暴英雄》、《DoTA2》等市面上RTS\Moba类游戏中的法球实现。

数据编辑器中增加了主动法球技能模版、被动法球技能模版、法球物品模版等等全新的模版,方便用户通过这些模版快捷地生产法球类型的技能和物品。

法球系统和主要分为主动式法球和被动式法球两种。分别由普攻法球技能节点和单位技能法球响应节点来发起。

法球的共性

法球系统本质上是一个“能修改其它技能的技能”系统。它可以设置生效几率,并在法球生效时修改原技能动画、替换原技能的投射物外观以及命中表现。此外,法球还拥有特有的伤害响应,可以修改受到法球影响的技能的伤害,并在造成伤害前附加额外效果。

举例而言,冰霜法球技能可以替换单位普攻技能的弹道外观为冰锥,命中表现为冰锥爆炸表现,并在冰锥击中敌人时外施加冰冻效果。闪电链法球可以在持有者的攻击命中目标后对目标自动施展闪电链。暴击法球可以令用户的技能出现几率暴击,并改变会暴击的那次施法的施法动画。

法球可以通过验证器和目标过滤对原技能进行判定,以决定是否要对某次施法进行修改(举例而言,某些普攻法球的效果或许不希望在攻击友军时被触发)。法球也可以设置内置的冷却时间,以及附加法球效果时所需额外消耗的法力。当法球处于内置CD或施法者的法力不足以支付法球技能的法力消耗时,法球也无法生效。

法球可以通过修改法球叠加Id字段来设置各自设置叠加Id,叠加Id相同的法球无法同时生效。特别地,叠加Id为空的法球可以互相叠加生效。

此外,我们还在发射投射物效果和伤害效果的高级属性中加入了 『允许被法球修改』 字段。该字段的值默认为真,代表这些投射物的外观和伤害可以被法球所修改,但用户也可以对特定的节点关闭这一字段,构造出无法被法球改变的特殊“副子弹”或者“副伤害”。

主动式法球和被动式法球的区别

修改范围上的区别:

主动式法球只能影响普攻技能。

被动法球可以影响任意主动技能。但是被动法球也可以通过勾选“仅修改普攻技能”来仅对普攻技能生效。

使用方式上的区别:

主动法球拥有单独的技能图标,可以通过点击主动使用。主动使用法球技能等同于立即向目标攻击一次,并在此次攻击上附加法球效果,若法球无法应用于指定目标,则技能指令无法下达。此外,主动法球技能可以开启自动施法。开启了自动施法的法球会在单位每次攻击时自动验证目标,并在攻击的目标符合条件的情况下(考虑法力消耗和冷却时间的限制)附加法球效果。

而被动法球无法被主动使用,只要单位拥有法球,那么每当它使用符合条件的技能时,法球效果就能自动地附加到该技能上。

叠加方式上的区别:

主动法球同一时间只能生效一个,很显然,当单位拥有两个主动法球时,用户并无法同时按下两个法球的技能按钮。即使两个主动法球技能都打开了自动施法,也只会有一个主动法球技能的效果被附加到攻击中。但是主动法球可以和其它被动法球叠加生效。

被动法球可以无限制地叠加,单位所拥有的多个被动法球可以同时生效,但被动法球也会受到法球叠加Id字段的限制。只有叠加Id或为空的被动法球才能以复数形式生效。

法球的伤害响应和普通的伤害响应到底有什么区别?

很大一部分星火编辑器的老用户可能会注意到一个事实,在以上对法球的描述文档中,除开法球能修改技能的投射物外观与命中表现的部分外,其它的特点似乎与从星火编辑器开测第一天就存在了的伤害响应节点机制很像。那么星火编辑器构造单独的法球响应节点而不是扩展已有的伤害响应节点的理由是什么呢?

实际上我们法球系统的伤害响应逻辑确实与伤害响应节点的实现方式有极大的相关性,法球系统直接采用了伤害响应的大量现有逻辑。而实际体验了法球系统的用户也可以注意到所有的法球模版都会自带一个专有的造成伤害响应节点,使用户可以在法球中使用伤害响应系统的全部功能。但是法球系统和伤害响应依然还是存在相当大的区别的,主要体现于两者的生效时机和生效范围上。

默认的伤害响应是在持有者造成或受到伤害时生效的。伤害响应本身在默认情况下并不关心伤害由什么技能或哪次施法发出(当然,用户依然可以通过验证器来对这些参数进行细致判定)。此外,伤害响应的判定和冷却都是在伤害产生时执行的,当某个技能造成伤害时,若单位身上的伤害响应已经被移除,那么伤害响应自然就不会生效。此外,由于伤害响应是在伤害产生时进行的判定,当技能还处于施法状态时,无法提前得知伤害响应能否附加成功,因此很难实现那些想要在暴击时播放特殊攻击动画的技能,毕竟等攻击弹道命中敌人造成伤害后再播放动画就太迟了。

但是法球的生效判定在技能开始施法时就进行了,此时若法球效果附加成功,会立刻进入冷却并扣除法力值,并且会立即修改技能的动画,技能的动画从前摇起就会被完整地替换,方便用来实现那些拥有特殊暴击动作的技能。

此外,法球一旦生效,其影响范围将囊括整个单次施法与该次施法的整个效果树。举例而言,如果某个技能中拥有多个投射物和伤害节点,而且这些节点都勾选了“允许被法球修改”,那么法球只需要支付一次消耗就能改变该技能中所有所有这些投射物和伤害(依然可以针对具体伤害进行验证),即使造成伤害或发射投射物时施法者已经不再拥有这一法球技能或者物品。

简单而言,法球技能或物品的生效判定在对应技能的前摇阶段就进行了(对于主动法球技能,在普攻的前摇阶段法球需要处于自动施法状态,或者用户主动地发布使用法球技能指令),而且会影响整个单次施法的效果树。即使单位在短时间内进行两次施法,两次施法的效果树存在时间重叠,它们各自是否受到法球影响的逻辑也是互相独立计算的。

自定义可执行效果节点

星火编辑器现在用户自定义自己的效果节点。

看到这里部分用户可能会有疑惑,因为自定义效果节点似乎又是一个星火编辑器测试第一天就存在的功能。这里需要澄清的是。旧有的“自定义效果”节点,其实是“执行一段任意触发器动作”的效果节点。用户可以在该节点中执行一段触发器,但无法改变节点的属性字段,也无法为其增加新的出口。这些“自定义效果”并没有增加新的数编效果节点类型。

但在星火编辑器加入了数编类型编辑器的现在,一个自然而然的功能扩展就是允许用户创建像“创建单位”、“造成伤害”、“搜索单位”、“周期性效果”这样有固定逻辑的、可配置参数的且可以在效果树中被执行的节点。

现在,用户可以前往数编类型编辑器(通过在触发器编辑器中勾选”显示自定义数编类型”来打开),在数编节点类型数据文件夹下通过新建类新建一个以“效果”分类的新节点类型。自定义的效果节点类型可以继承任意现有的效果节点结构并进行扩展,也可以选择继承自”效果”分类以完整地自定以节点结构。

在创建完成一个新的效果节点并添加完该节点所拥有的所有字段后,用户可以在类型配置界面中看到一个新的“可执行节点”勾选项。勾选这一选项即可令该效果节点变为可执行的效果节点。与此同时,界面上也会多出两个公式和一个“是持续性节点”勾选项。

其中,执行公式决定了该类型的效果节点在被执行时所执行的逻辑,而验证公式则决定了该类型的节点在被执行前所需满足的验证条件。(注意,所有的效果节点依然需要满足各自的准入验证器才可被执行,效果节点的类型验证公式与准入验证器需要同时被满足才能执行一个节点)

在执行公式中,用户可以编写逻辑读取当前节点的数编属性(通过[效果节点].数编表来获取),并凭借这些输入参数来执行逻辑。对于需要执行子效果的节点,则可以通过[效果节点].执行子效果方法来实现子效果的执行。

效果节点的执行公式与验证公式本身需要立即返回,无法在当前线程中等待。但用户可以在执行公式中使用循环计时器和“等待一段时间后执行动作”的动作,以此来实现一个拥有持续时间的效果节点。

持续性效果节点需要勾选“是持续性节点”的勾选项。并且在节点需要结束时执行[效果节点].结束方法。需要注意的是,非持续性节点无需主动调用结束方法。只有持续性效果需要主动地申告结束,瞬发节点视为在函数返回时自动结束。

在自定义的持续性效果节点和瞬发效果节点下方挂接的所有表现节点也会遵循与普通效果节点下的表现节点同样的显示逻辑。

自定义可执行效果节点是一个上限非常高的功能,我们后续会在文档中提供一些使用的案例帮助大家理解这个功能的使用方法和价值。

单位、技能、物品、Buff对象的UI显示自定义

星火编辑器进一步提高了单位、技能、物品、Buff等对象在界面上显示方式的自定义程度。

用户可以点击数据编辑器左侧的齿轮,并在弹出的列表中选择“游戏机制设置”。在全局游戏机制配置中,用户将可以对游戏中的单位、技能、物品、Buff四种对象的显示名、提示信息、图标、冷却显示数值和最大冷却数值进行公式化自定义。

我们也对现有的官方技能摇杆、物品拾取控件、物品栏控件、多功能格子控件、Buff显示控件进行了修改。现在这些官方控件将会尝试读取用户在全局游戏配置中的自定义公式来显示各种对象的名称、提示、图标和CD。

举例而言,用户如果想要让一种特殊物品的图标永远显示当前玩家的角色图标,名称永远显示用户的昵称,就可以通过这个自定义公式功能来返回自定义的结果。

再比如,用户如果想让1级的『单手剑』显示为『单手剑Lv1』,5级的『单手剑』显示为『单手剑Lv5』,用户也可以在对应的『显示名公式』中单独针对『单手剑』根据其物品属性进行对应名称的拼接处理。

此外,多功能格子控件现在也可以直接绑定一个物品对象,而非只能显示一个数编物品。

UI控件动态事件新方案

我们在上一版本的更新中提供了一种动态修改控件事件的功能,但这一功能仍然无法正切地在动态创建的控件上生效。为此,我们对UI控件的事件系统进行了又一次更改。使新的动态事件机制可以同时对动态创建的控件和UI编辑器创建的控件生效。

此外,我们重新评估了动态修改UI事件的用户体验。今后,动态设置控件事件不再需要通过一个额外的事件函数来进行,只需要直接在客户端触发器中对[控件].事件.[事件名]进行赋值即可。

命令行测试项目的功能

在星火编辑器的用户中已经出现了一些长时间使用脚本来编写逻辑的用户。这些用户大部分的开发工作都可以在vscode中完成。但当这些用户需要测试项目时,依然需要重复打开编辑器->打开项目->保存项目->调试的步骤。

为了方便脚本用户以及其他一些有特殊需求的用户直接对星火编辑器项目进行调试。星火编辑器加入了命令行调试项目的支持。

我们提供了-generate_and_debug_map 启动参数,使用该参数启动星火编辑器的exe时,将不会打开编辑器界面,并且编辑器会跳过各大模块的保存和读取流程,仅仅执行typescript脚本转换和调试流程,极大地提高调试效率。使用-generate_and_debug_map参数可以额外使用-file_path参数来指定需加载的项目所在的路径。如果没有 -file_path 参数,会将执行命令行时所在的目录视为需要加载的项目目录。

数据编辑器

  • 我们此前没有节点提示信息的效果节点都加上了节点提示信息(如Buff单位组相关节点现在会提示取哪个单位的Buff,移动器附加效果节点会提示移动器的附加目标和移动器目的地,等等),预期这一改动可以更好的帮助大家掌握和使用数据编辑器的各类效果节点。

  • 现在自定义移动器的服务端公式会传入当前移动器的参数。用户可以使用移动器的移除方法随时移除移动器以停止自定义移动器逻辑。

  • 数据编辑器加入了蓝图私有节点转换公有节点功能,现在右键点击蓝图中的一个私有节点,可以自动将其极其所有后续节点转换为一个公用节点,并保持原有的连线关系。注意这一功能只能对当前项目建立的蓝图节点生效,无法转换依赖库中的私有节点

  • 现在游戏开始时创建的场景表现也能正常被显示了,不再需要进行等待。(之前可能需要一个『等待0秒』的动作才能正常创建表现)

数编类型编辑器

  • 在类型编辑器中构造数编类型并新建字段时,字段的类型选择界面现在加入了搜索功能和分类结构。

  • 现在数编类型编辑器中的节点属性也可以正常地被复制粘贴了。

触发器编辑器

  • 客户端单位现在增加了获取普攻技能的方法。

  • 服务端触发器现在可以令指定单位对特定玩家强制可见或不可见。强制可见的单位即使在战争迷雾里也永远能被指定玩家看见。 现在,触发器运行到'获取地编单位'时 如果没有加载对应场景,会输出对应的错误提示信息。

  • 未填写的参数现在会显示为”未填写”并显示红色的感叹号。

  • 我们改进了触发编辑器的搜索功能,现在能够正常搜索到匿名函数中的元素了。

  • 现在大部分的左侧触发器元素都可以设置悬停提示。

  • 现在触发器右侧树状视图中的静态类型名会带上[]标记,以与普通的对象变量进行区分。如[线程].当前线程

  • 当空值与数值进行大小比较时,将永远返回假,而非出现脚本错误。

我们优化了条件比较语句的错误提示:

当用户选择相等=比较时

  • 右侧的可选的类型永远是左侧的类型 或 未定义。右侧永远可以选择未定义。

  • 若右侧类型不属于左侧类型 或 未定义,则显示黄色警告提示类型不符。

当用户选择不等于~=比较时

  • 右侧的可选的类型永远是左侧的类型 或 未定义。右侧永远可以选择未定义。

  • 若右侧类型与左侧类型不符,也不是未定义,不会有任何变化。

当用户选择大于或小于比较时

  • 左侧右侧类型若有一方可能为空,则显示黄色警告。

  • 左右侧任一方不为数值,则显示红色警告。

预制功能与预设机制

我们优化了云变量物品批量存取时的逻辑。现在可以使用触发器动作将一组云变量物品批量绑定给指定玩家和解绑。我们推荐用户在批量绑定和解绑时使用这些动作,这将可以有效地减少逐一绑定/解绑大量物品时导致的云变量流量限制问题。

邮件系统已支持局内使用

我们对局外的邮件模块进行了优化,现在邮件也可以在局内使用了。邮件按钮可以在『界面编辑器-组件库-邮件按钮』中找到并拖到UI中,类似的功能按钮一般都是界面编辑器组件库中获取。界面编辑器中的组件库

局内任务内测版

本次更新我们放出了局内任务预制功能,这是一个接近开发完成的版本,但是尚未经历充分的测试。欢迎大家在内测版本中体验相关功能(和BUG),欢迎大家提出此功能的建议和反馈,帮助其更好的满足不同开发者的使用场景(小算盘啪啪响)。相关文档看参考:局内任务介绍

预制功能-局内语音正式上线

预制功能-局内语音现已上线,需要的开发者可以在预制功能中导入相关功能。目前语音功能提供了团队语音、全体语音功能,过去一段时间少量游戏进行了测试,相关成本为:每100分钟0.3元

关于语音时长计算有如下细则可以参考:

  • 开启语音或开启麦克风的任意一个或者全部开启,均视为开启语音功能。

  • 如果一个4人组队游戏,4人均开启语音功能,则每一个现实时间1分钟,计费时间为4分钟。

  • 如果一个4人组队游戏,2人开启语音功能,则每一个现实时间1分钟,计费时间为2分钟。

  • 如果一个4人组队游戏,只有1人开启语音功能,我们会在服务器做拦截,避免产生计费;若有第二人开启语音,此时才会正式开启语音计费;若开启语音的人数降低到1人,我们会实时恢复相关拦截,避免产生计费。

  • 如果一个3V3游戏,虽然有两个阵营,但只要玩家有>1个开启语音,即会产生计费。

  • 如果一个单人游戏,开启语音功能,我们会在服务器做拦截,避免产生计费。

其他优化

对我的资源、粒子编辑器预览窗口的菜单排布方式进行了调整,以解决1080P屏幕默认布局显示不全的问题。

错误修复

  1. 修复了使用触发器设置一个末端没有附着在单位上的光束表现的目标高度后,会使光束发射到地图(0, 0)点的问题。
  2. 修复了水面地形偶现的叠加高草问题。
  3. 修复了一个由地编单位属性面板导致的编辑器崩溃问题。
  4. 修复了N选1的奖励消耗物品如果堆叠数量为-1时判断错误的问题。
  5. 修复了商店模块没有连接有效的奖励池时导致脚本错误的问题。
  6. 修复了触发编辑器中部分结构下的局部变量无法被参数列表选择到的问题。
  7. 修复了在数据编辑器模型素材节点中增加节点动画表现时会出现脚本错误的问题。
  8. 修复了抽奖系统不支持局外资源获取的问题。
  9. 修复了创作者中心进行云变量回档操作后可能会出现查询超时的问题。
  10. 修复了预设技能的icon未能正常显示的问题。
  11. 修复了红色碰撞未如预期阻挡冲锋节点的问题。
  12. 修复了游戏中的拾取列表无法正常上下拖动的问题。
  13. 修复了游戏中大量物品同时加载时客户端报错的问题。
  14. 修复了连续施法机制失效的问题。
  15. 修复了自动施法间隔无法小于0.5秒的问题。