跳到主要内容

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

多段连招技能配置优化

自从之前的更新中加入了多段连招技能以后,我们收到了一些相关的反馈。有时候用户可能希望每一次施法都提升技能阶段,但每次都得执行一个修改技能阶段的节点。而另一些情况下,用户设计的多段连招技能可能每一段的效果都差别极大,在同一个效果树蓝图中通过公式来进行分支过滤可能会比较繁琐。

针对这些情况,我们进一步简化了多段连招技能的配置方式,多段连招技能获得了以下两个勾选标旗:

『每次施法自动提升段数』

勾选后每次施法成功后会自动使技能的连招阶段属性+1,无需手动修改。

需要注意的是,原有的修改技能连招段数节点依然有效。对于有复杂连招变化需求的技能,用户依然可以不勾选这一标旗,并在效果树中根据条件来手动推进连招阶段。

我们已经使用这一标旗修改了默认的三连击技能样例。

『每个连击段配置不同的效果树』

勾选后,技能的效果树出口将变成一个数组。用户直接可以针对不同的连击段数来配置不同的效果树。免去了使用验证器或者switch节点来设置复杂分支的麻烦。

在效果节点中遍历单位组

应用户的需求,我们在数据编辑器中增加了一个全新的节点:『遍历单位组』节点。

该节点允许输入一个公式,返回任何一个用户所指定的单位组。然后,该节点执行时会遍历用户所指定的单位组中的所有单位,并像搜索单位节点一样逐一对这些单位执行用户所连接的后续效果。

我们认为这一节点功能可以更好地取代略显臃肿的『Buff单位组』系列节点。除此之外,我们还修复了获取指定Buff上的Buff单位组的函数,该函数获取的Buff单位组也可以直接在遍历单位组节点中使用。

技能射程公式优化

技能射程公式是星火编辑器很久以前就加入的功能,但是该功能在一些情况下的运作方式并不符合用户的预期:比如技能射程公式在过去对向量目标技能其实是无效的(因为向量技能的目标是一个方向)。而技能公式所改变的射程只影响技能的实际射程,却没有正确地反应在技能指示器的技能射程之上。

为此,我们对技能射程公式机制进行了重构。并将向量技能的『射程』定义为 从施法者的沿着技能方向到技能终点见的距离。从今以后,技能射程公式将对向量技能也产生效果,而技能指示器也能正确地同步获取服务端射程公式对技能射程所进行的修改。

屏幕坐标射线——获取指定屏幕位置的单位和表现

过去的客户端单位选中事件中,用户只能捕捉到鼠标点击位置的第一个单位。但是当单位被其它单位遮挡时,用户将很难获取鼠标位置下的其它单位。除此之外,我们也收到了用户希望能够获取鼠标点击位置下的表现的反馈。

我们加强了星火引擎中屏幕坐标射线功能的支持,令用户可以获取同一屏幕位置的多个单位和表现(如果你不了解什么是屏幕坐标射线也没关系,只需要知道它可以帮助我们获得指定屏幕坐标位置下所有的单位和表现)

增加了以下两个客户端函数:

『从屏幕坐标获取所有单位』

用户可以指定一个屏幕坐标,该函数会返回一个这个屏幕坐标位置下所有单位的数组。即使那个坐标下有多个单位重叠着。该数组以单位的先后遮挡顺序排序。

如果需要获取鼠标点击位置下的所有单位,可以通过鼠标点击事件来获取屏幕坐标,然后传入该函数来获得该位置的单位。

『从屏幕坐标获取所有表现』

与以上逻辑功能类似,但获取的是指定位置的表现的列表。但要注意的是,为了优化内存占用,在默认情况下该功能是不开放的。用户需要事先使用『设置是否允许通过屏幕坐标获取表现』动作来打开这一模式。且仅有在打开该模式后所创建的表现可以正常通过屏幕坐标来获取。

注意以上两个函数都需要通过模型外观来判定单位和表现的选定范围坐标。如果表现本身不具备模型(如本身是一个音效或者氛围表现),可能很难通过坐标来将其选取。

施法实例与AI施法判定优化

我们优化了『单位正在施放的技能施法实例』触发器函数。现在,只要单位正在执行一个施法指令,即使单位处于为接近目标的行走状态下或是引导完成后的后摇状态下,该函数都能获得对应技能的施法实例。

考虑到过去的一些AI逻辑可能习惯通过该函数来判断AI单位是否在施法过程中,而用户可能预期AI会无视技能的后摇状态,并快速地进入下一个动作。我们为触发器中的AI对象添加了『是否在施法』的方法,这一方法更接近我们对AI的常规预期:当AI单位处于后摇状态,且该后摇状态为不可打断时,AI会认为该单位并没有在施法,并可直接进行下一步的动作。

我们已经修改了默认AI以及数据编辑器中官方AI的行为树,令它们使用这一新的方式来判断AI单位是否在施法。我们同样建议过去使用了这一函数来构建AI行为树的用户尽快改用新的方式来判断AI单位是否在施法。

这一改动同样改善了默认AI会在一些特定技能配置下卡住的问题,比如用户如果将AI单位的一些技能的后摇阶段设置为不可打断,那么在过去的配置中,AI可能会认为单位已经结束了技能施放,而尝试为单位下达新的指令而导致问题。

需要特别注意的是,AI对象的『是否在施法』方法仅在AI判定的语境下适用。在通常逻辑的编写中,仍应当用『单位正在施放的技能施法实例』来判定单位是否在施法,此时,用户依然可以获取技能的当前阶段,并通过读取技能数编表配置来判断技能是否处于不可打断阶段。

召唤物跟随/攻击AI

我们简化了召唤物跟随/攻击AI的使用方法。增加了以下两个触发器动作。

『令单位跟随另一个单位(仅跟随)』

用户可以指定一个宠物单位跟随其主人,并可指定该宠物在主人周围的巡逻范围和巡逻频率。

『令单位跟随另一个单位(进行攻击)』

表现与以上动作类似,但跟随者会试图保护主人,并对路途中的敌人进行攻击。在主人远离敌人的情况下,跟随者会放弃攻击并跟上主人。 用户可以在AI编辑器(在数据编辑器左上角点击齿轮,打开『自定义AI设置』)中修改『召唤物跟随』AI的行为树,以对以上两个触发器动作中AI单位的行为进行进一步的深度定制。

在运行时为UI控件添加事件

现在,由『创建组件实例』触发器动作所动态创建的UI控件可以在触发器中动态地添加事件了。具体方法为使用赋值语句为该控件的『.事件.[事件名].事件函数』属性赋值一个指定的函数或匿名函数。 例如:

[按钮1.事件.点击.事件函数]<-[自定义的按钮点击事件处理函数] 这一方法同样可以用来修改非动态创建的UI控件的事件处理函数。

效果树的运行时动态拼接

我们为效果节点对象增加了『执行子效果』方法。在触发编辑器和数据编辑的公式中,用户可以通过这一方法来在一个现有的效果树中执行任何一个指定的效果节点,而不是创建一个全新的效果树来执行。

该方法需要指定一个父节点和新效果节点的默认目标,若不指定目标,则视为继承指定的父节点自身的节点目标。

新的效果节点在执行时会将指定的父节点视为其父节点,即使该父节点很久之前就已经结束。新的效果节点能获得原效果树中所有的公用数据(如施法者、引发物品等等),也可以正确获取父节点和祖先节点的所有信息。

通过这一方法所拼接出的效果树将与数据编辑器中的效果节点连线完全等价。用户可以通过这一功能自由组合各种效果节点,实现效果树动态自定义。(举例:可在暴风雪命中目标后,动态拼接风暴之锤的投射效果节点,实现对被暴风雪命中的目标群体释放风暴之锤的效果,这仅仅是效果树自定义功能最基础的应用,我们期待用户使用这一功能实现更多的奇[脑][洞][大][开]

文字和光束表现的动态自定义

光束和文字表现以往只能通过数据编辑器来创建和配置。为了加大自由度,我们为这两种表现增加了动态修改和创建的支持。以下触发器动作同时在客户端和服务端触发器都能生效:

光束表现

  • 『设置表现的发射点位置』:可以设置光束表现发射位置的坐标,光束可以从一个单位身上发射也可以从一个点发射。
  • 『设置表现的发射点z高度』:若光束表现的发射源为一个点,该函数可以修改该点的3D高度。
  • 『设置表现的发射源单位和绑点』:设置光束表现发射源为指定单位的指定绑点位置。

注:在使用触发器创建光束表现时,光束表现的创建坐标就是其目标点位置。如果想要将光束的目标位置也设置到单位身上,可以直接使用附着表现到单位上的动作直接附着这一表现。

文字表现

  • 『设置表现的文字』:在创建文字表现后,用户可以通过这一动作来动态修改文字表现所显示的问题。

适合回合制游戏的技能指示器

为了加强对回合制游戏的支持,我们在数据编辑器中新增了两种适合回合制游戏的技能指示器。

回合制单位目标选择指示器

  • 该指示器仅对单位目标技能生效。
  • 点击技能后无需拖拽,选中目标后需要再次点击。
  • 选中一个目标后会有目标选择光圈并高亮描边,只有符合目标过滤条件的目标可被选中。
  • 再次点击被光圈选中的主目标单位,则视为确认并施法。
  • 当有任何单位被光圈选中时,再次点击原技能也视为确认并施法。
  • 目标选择阶段点其他技能会直接取消目标选择。
  • 目标选择阶段点取消区域或者空地会取消目标选+择。
  • 若技能启用了智能施法,则在点击了一次技能后直接在符合智能施法过滤和范围的目标身上显示目标选择光圈,若用户对此目标满意,直接再次点击该目标即可确认施法。(其它目标要点2次)。
  • 若技能配置了施法光标范围,则在主目标周围范围内符合智能施法过滤器的目标也会显示次要的目标选择光圈。
  • 在数据编辑器的指示器节点上可配置主次目标的选中光圈表现。

回合制无目标技能指示器

  • 仅对无目标技能生效。
  • 点击后,对周围技能配置的施法光标范围内的单位显示目标光圈并高亮描边。无需手动选择目标。目标也需要符合智能施法过滤(今后无目标技能也可以配置智能施法单位过滤字段)。
  • 再次点击任何一个身上带光圈的单位则视为确认并施法。
  • 再次点击原技能也视为确认施法。
  • 目标选择阶段点其他技能会直接取消目标选择。
  • 目标选择阶段点取消区域或者施法光标范围外的空地会取消目标选择。
  • 在数据编辑器的指示器节点上可配置选择光圈表现。

我们今后也将进一步扩充星火编辑器所支持的游戏品类。

触发器配置文件与脚本文件的分割

在过去,新版触发器每个项目只会在客户端和服务端各生成一个单独的配置文件和脚本文件。但当一个项目过于庞大时,这个设置会使多人协同开发的难度提高,而过于臃肿的单个脚本文件也会产生各种各样的脚本沙盒问题(如,lua语言不允许200个以上的局部变量)。

为此,在新版本中,我们将触发器的配置文件及其生成的脚本文件进行了分割。今后触发器配置文件将按照触发器左侧树状图的每个单个元素分别保存。方便多个用户协同开发同一个项目的脚本文件,也使得触发器的版本控制更加自由。相应地,触发器所生成的脚本文件也会自动进行分割,以免出现单个文件过大的问题。

地形编辑器

我们在地形编辑器的场景属性中增加了一个『地图边界』字段,用户可以设置一个指定宽度的地图边界。边界外的地图会被自动描述为不可通行区域,使单位无法抵达边界之外。玩家的镜头也会受到这个边界的限制。

触发编辑器

我们优化了玩家在触发器中填写四则运算表达式的体验。

我们优化了玩家在触发器中填写四则运算表达式的体验。

例如,当用户尝试将一个数值类型的对象修改为[a]+[b]形式的四则运算表达式时,原有的值不再会消失,而是会被自动填入四则运算的左侧值中。

在实际体验中,我们发现用户经常需要扩充一个现有的四则运算表达式,但每次扩充时都需要用一个四则运算表达式覆盖掉一个原值,之后多数情况下,用户可能会需要再次输入被覆盖掉的值作为新表达式的操作数之一,因此我们针对这种情况进行了特殊处理,将原有的数值或变量保留了下来。

当然,在需要输入复杂公式表达式的场合,我们仍然推荐用户使用立即值中的『数值公式选项』,而非表达式中的+-*/四则运算选项。因为四则运算表达式一次只能输入两个操作数,但数值公式选项允许用户一次性对多个操作数进行数值运算。

我们优化了触发编辑器的前进后退行为,使其在进行定义跳转后依然可以正确回退到之前的页面。

现在自定义事件的文本内容可以通过搜索搜到了。

数据编辑器

  • 我们增加了全新的『技能属性修改』节点,与之前加入的冷却和段数修改节点类似。该节点将允许用户指定效果树中某个单位身上的特定技能并修改其技能属性,也可以直接修改效果树当前技能的属性。
  • 我们优化了『技能冷却修改』节点、『技能连击段数修改』节点和『技能属性修改』节点在数据编辑器中的提示信息。可以更有效地帮助用户理解到该节点正在尝试修改哪个单位的技能。
  • 我们对自定义单位属性公式进行了进一步的优化,现在多个属性之间可以实现连锁影响(过去当属性A影响属性B,属性B影响属性C时,修改属性A并不会自动刷新属性C)。

新的作弊码

我们增加了新的作弊码,允许用户通过它们来为选中的单位添加和删除技能、Buff。、用户也可以通过SetDebugUnit作弊码来固定一个操作单位。

AddBuff [Buff的Id]

为选中单位(如果没有选中任何单位,则使用主控单位)添加buff,缩写为ab

RemoveBuff [Buff的Id]

移除指定Id的Buff,缩写为rb

AddAbil [技能Id或技能的显示名]

为单位添加指定的技能,缩写为aa。

RemoveAbil [技能Id或技能的显示名]

移除单位身上指定的技能,缩写为ra

预制功能

  • 通用背包配置中增加了背景图片的支持,可以为不同配置的装备设置不同的背景图片了:如果物品的图标为透明背景,可能会有更好的视觉表现。
  • 我们优化了Buff显示控件中Buff在即将消失前的闪烁表现,使其不再那么令人闪瞎眼。
  • 单位属性面板现在可以通过『绑定的单位』属性来直接设置其绑定的单位,而不需要再使用『绑定的单位Id』。
  • 我们统一了官方聊天库和触发器中获取玩家昵称的方式,今后两个地方获取的玩家昵称应当不会出现不一致的情况了。此外,我们在服务端和客户端增加了新版本的『发送聊天信息』动作。该动作能显示一条自定义的聊天信息。此外,用户可以指定该信息的发送者显示为哪一个玩家,也可以输入一个完全自定义的发送者名称。
  • 注:该触发器动作需要在预制功能库中应用『局内聊天』库才可使用。
  • 我们进一步优化了在按住移动摇杆时使用技能的反馈体验。

其他编辑器更新:

  • 现在上传项目时会检测所有被项目引用、有本地修改且未上传的资源;例如开发者在本地的资源添加了武器但未上传更新;过去这些问题会带来编辑器调试和手机调试表现不一致的情况,预期这一环节可以减少此类情况的出现。
  • 『我的资源』中音效预览页面可以切换循环播放和单次播放了,对于一些短促的音效可以更好的感受其真实效果。
  • 地形编辑器中的光源可以通过图标区分动态光和静态光了。

错误修复

数据编辑器

  1. 修复了模型数据节点的额外动画没有正确被重定向的问题。
  2. 修复了模型数据节点的额外动画无法被设置别名的问题。
  3. 修复了拥有碰撞半径的物品在被拾取后依然会在原地留下碰撞阻挡非英雄单位的问题。
  4. 修复了部分模型表现在附加到单位身上后阴影错位的问题。

触发编辑器

  1. 修复了『修改单位血条模版』触发器错误地出现在了服务端而非客户端的问题。(用户可以使用这一触发器动作动态修改一个单位所使用的血条,若设为空,则会隐藏血条)
  2. 修复了遍历数组、Map、简单表语句中的语句变量无法在『变量』选项卡中被选到的问题。
  3. 修复了条件分支语句和赋值语句在被禁用后,保存地图再次打开会使它们的禁用状态消失的问题。
  4. 修复了在服务端和客户端之间复制内容导致的错误。
  5. 修复了获取指定Buff上Buff单位组的函数。
  6. 修复了预设值选择界面中,验证器代码的预设值显示了两份的问题。

UI编辑器

  1. 修复了聊天库在一些情况下报错的问题。
  2. 修复了『多功能格子』控件在拖入UI编辑器时报错的问题。

官方技能样例

  1. 修复了暴风雪技能的冰片在特定情况下无法被显示的问题。

编辑器信息列表

  1. 修复了部分触发器出错时仅仅显示了一句『co.lua错误』的问题。这个问题是此前所添加的触发器线程控制功能所导致的。

预制功能

  1. 修复了技能摇杆和自定义摇杆所触发的摇杆按下事件和摇杆移动事件没有正确给出摇杆方向和距离参数的问题。
  2. 修复了『背包面板』和『拾取』图标在点击的时候会触发“背后”单位的点击事件的问题。