跳到主要内容

2023年7月31日星火编辑器更新日志

数编节点类型编辑器

在星火编辑器用户中一直流传着这样一种传说:星火编辑器将来会允许完全自定义数编节点的结构。

在经历了几个月的画饼以后,星火开发组终于推出了数编类型编辑器的第一个测试版本。

为了更好地体现数据编辑器和触发编辑器的一体性。我们将数编类型编辑器的入口放在了触发编辑器中。

在触发编辑器的左下角新增了一个显示自定义数编类型的选项,在勾选后,触发编辑器的树状图中将会出现一个当前地图的数编类型数据文件夹,其下分三个子文件夹。

自定义数编类型数据

数编节点分类

在这个文件夹下,用户将可以自定义和扩展一个全新的数编节点分类。数编节点分类指的是如”单位”、“技能”、“Buff”、“效果”这样的节点大类。当用户在在数编节点分类文件夹下新建一个新的分类后,即可在数据编辑器左侧的齿轮中找到并勾选显示这个分类下的所有数据。例如,用户可以在此自定义一个“成就”数据分类,并可在数据编辑器内为这个分类填充各种成就蓝图。

数编及节点类型数据

  • 在这个文件夹下,用户将可以像新建普通的触发器类一样新建一个数据编辑器节点类型。用户所构造的新节点类型可以是一个全新分类下的全新节点类型,也可以是一个在旧有数编分类下继承自现有数编节点类型的新节点类型。
  • 比如,用户可以继承单位节点类型,构造一个新的自定义单位节点类型,该节点类型将拥有单位节点类型的所有字段,还包括用户所添加的所有自定义字段。同时使用该单位节点类型所构建的单位蓝图将可以和普通的单位蓝图一样被创建单位动作所创建。
  • 当然,用户也可以通过这一功能构造全新的属于自己的复杂表结构,不用再忍受结构单一的任意数据节点。
  • 在构建了全新的节点类型后,用户可以在数据编辑器的模版配置中(需要在齿轮中勾选模版)配置该节点类型的属性默认值,甚至构造全新的二级模版。
  • 在使用模版构造节点数据后,用户也可以通过触发器来读取这些使用新节点类型所构造数据内容。

数编属性类型数据

  • 在这个文件夹下,用户可以新建并自定义数据编辑器专用的子属性结构体类型。数编属性类型与数编结构类型的区别在于,节点类型是可以直接创建为数编节点的类型,而属性类型不能。但相应地,属性类型结构可以作为结构类型的属性而存在,而且属性类型之间允许嵌套,允许我们的数编节点拥有二层、三层甚至N层的属性结构。
  • 除了属性类型之外,用户还可以在该文件夹自定义数编专用的预设值类型,预设值类型可类比于编程概念中的枚举类型,它们在数据编辑器中显示为下拉菜单。
  • 这只是数编类型编辑器的尝鲜版本。我们今后仍将进一步对类型编辑器的体验进行优化。也将推出更多详细的教程。

新的数编任意数据节点:任意数编节点支持与哈希表支持

  • 对于自定义数编表格需求,我们将数编类型编辑器视作最佳实践。但有时候用户可能只是想要临时建立一个简单的数据表,并不希望通过类型编辑器去先建立一个复杂的类型结构再进行编辑器。
  • 这种开发方式可以类比于触发编辑器中类和哈希表/数组的关系:在触发编辑器中,用户可以通过建立一个类来完全自定义自己的数据结构,但有些时候在结构简单的前提下,直接使用数组和哈希表可能更加方便。我们将类型编辑器中自定义的数编节点类型比作触发器中的类,那么数编中的任意数据节点就像是触发器中数组和哈希表的地位。即使类型编辑器允许用户自定义自己的节点结构,我们也仍然希望任意数据节点可以继续发挥自己的余热,与类型编辑器相辅相成。
  • 在过去,任意数据节点的一大痛点在于我们只提供了有限几种节点类型的支持(单位、技能、buff等等)。每次我们需要提供一种新的任意数据数组,就需要增加一种新的蓝图节点类型,迄今为止,任意数据分类下的节点类型数量已经十分臃肿了。而在类型编辑器推出后,用户现在可以新建自己全新的节点类型分类,这也意味着我们不可能预先预知到用户会新建什么样的节点类型分类,并为其准备对应的任意数据节点。
  • 因此,我们对数据编辑器中任意数据支持进行了大规模的重构,使得『任意数编节点』成为了一种有效的数编属性类型。 相应地,我们增加了以下两种任意数据节点:

任意数据 - 任意数编节点

和其它的任意数据节点一样,任意数据 - 任意数编节点节点可以保存一个单个值、一个1维数组值以及一个2维数组值。但这一节点的值类型将不再限定数编节点的分类,而是可以连接到任意一个公用或者私有的数编节点。 在同一个数组中,用户设置可以将不同的数组索引指向不同类型的节点,实现节点的混合存储。 这个节点类型也省去了星火编辑器针对现有的数十种不同数编节点分类生成数十种任意数据节点的麻烦。

任意数据 - 任意数编节点

哈希表 - <字符串, 任意数编节点>

  • 习惯了使用表格的游戏设计师可能会习惯于在2维表中使用特定数字作为索引来保存特定的值。但数组终究没有字符串属性名来的方便。
  • 这次星火编辑器的重构使得数据编辑器拥有了哈希表的支持。而全新的哈希表 - <字符串, 任意数编节点>就是这一功能的一个样例。
  • 该节点就像是触发编辑器中的一个Map或者简单表,可以以一个任意的唯一字符串作为Key,连接一个任意的数编节点。而触发编辑器则可以自由地读取这些这些表中指定字段的值。

需要重申是,任意数据节点也只是数据编辑器中的一种节点类型。通过类型编辑器,用户可以建立更多自由类型的任意数据节点(比如数编属性类型的数组),或是其他结构的节点类型。

数编异常及数编异常状态

在使用数编过程中可能会发现信息列表的编辑器标签下,经常会有一些数编相关的报错,部分报错可以在编辑器中修复,还有一部分错误需要手动修改配置文件进行修复。

受限于数编配置文件的复杂结构,这个修复过程比较困难。为解决此问题,星火编辑器新增了数编异常及修复功能,方便用户修复数编相关的错误。

数编数据现存异常在信息列表中新增的“数编异常信息”标签中列出。可以通过工具栏筛选指定模块、指定错误等级的异常,也可以通过搜索栏搜索错误信息中的文本。最右侧“重新检测数编”按钮可以在任何时刻完整的对数编进行检测(执行速度受数编对象数量影响,可能较慢,请耐心等待)。异常信息包含代码、内容、模块、对象、路径、有效性六栏。

  • 代码:异常的ErrorCode,表示异常的基本分类
  • 内容:异常的描述信息,显示具体哪里存在问题
  • 模块:存在异常的数编对象所属模块
  • 对象:存在异常的数编对象
  • 路径:异常位于数编对象的那个值
  • 有效性:标记异常是否一定有效,异常可能由于其它修改而修复或者变化,如果异常状态为过期,则表示此异常不是最新检测出的。

此外,在蓝图所属节点上右键菜单中也增加了检测节点所属异常的选项

注意事项:异常的修复基本上采用删除无效数据,重置成默认值的模式,受限于数编的复杂结构,修复可能引发依赖当前对象的其它数编对象的上的新异常。异常修复操作支持撤销/重做,如果修复带来更多的麻烦,安心撤销操作即可还原。

多段连击技能的支持

在过去,当用户想要实现连续施法时拥有不同施法动画和施法时长的技能时(比如连续挥刀三次,各有不同动作和伤害的攻击连招),通常只能通过替换技能来实现。为了解决这一痛点,星火编辑器加入了真正的技能连招支持。

  • 我们在技能节点中增加了“多段技能”的标旗,勾上这一标旗后,技能可以指定一个额外的多段技能段数。此外,还会多出一个新的多段技能配置数组。在多段连招技能配置数组中,用户可以可以配置不同“段数”下技能的施法时间、冷却、消耗和动画以及技能图标,每段连招还可以各自自定义详细的技能时长。
  • 多段技能的初始段数默认为1,可通过修改多段连击技能段数效果节点来修改技能的段数(通常为+1)。若修改技能段数的值超过最大段数,则会取其余数。
  • 在技能公式与验证器中,用户可通过效果节点的施法连招段数动作来获取当前效果节点执行时,技能的连招段数。这一数值在单次施法的整个效果树中是固定的,即使在施法过程中技能自身的段数发生了改变,该函数也会正确给出当前施法实例所属的段数。
  • 我们在官方样例技能中增加了名为『三连击』的技能,作为多段连招技能的基本样例。
  • 在今后,我们还会进一步加强技能的动画与特效支持。

多场景小地图支持与场景小地图自动生成

在地形编辑器中左侧的树状列表的场景文件夹下,我们加入了小地图这一子元素。点击小地图元素后,用户将可以在属性面板中勾选是否启用这一场景中的小地图。

在这一面板中,用户可以配置小地图的各种设置,如尺寸、锚点和颜色,也可以导入一张自己的地图作为小地图背景图片。除此之外,用户也可以通过点击生成默认小地图按钮来基于当前场景自动生成小地图图片。

小地图可用属性

在配置完小地图后,用户可以在UI编辑器中拖入小地图控件,以显示当前场景的小地图,而配置了小地图图标的单位则会按照各自的相对位置显示在小地图上。

有关小地图功能的更多使用说明,请参考稍后更新到文档『功能手册-预制功能库』下的小地图教程教程

作弊码功能改进

在此前的更新中,我们增加了在编辑器作弊码页面输入作弊码的功能。这些作弊码对内部和外部的游戏开发起到了很多帮助,因此我们针对这一功能进一步作出了更新。

我们总结了以前的几个痛点:

此前,作弊码只能通过编辑器信息列表窗口的作弊码页面进行输入。但这一信息列表仅仅在编辑器内运行游戏调试时有效。而当用户使用触发器调试功能时,编辑器会创建一个单独的窗口来运行游戏,而编辑器的作弊码页面功能无法与编辑器独立的游戏进程生效,因此用户会陷入作弊码和触发器调试功能无法得兼的尴尬之中。

用户在作弊码窗口输入作弊码会丢失游戏窗口的焦点,也无法得到及时的反馈。

创建单位与物品的作弊码无法自由地指定位置,若用户没有主控单位,通常会创建在地图的0,0位置,非常不方便。

创建单位与物品的作弊码需要输入单位与物品的完整Id,使得作弊码长度过长,不方便输入。

在新的版本中,我们做出了一些针对性的改动。

  • 当用户使用了官方聊天系统机制时,在聊天框输入作弊码也能产生效果。(仍需要用户处于调试模式下)
  • 创建单位、物品的作弊码现在可以直接填写物品和单位的显示名。例如:mu 狼人。
  • 当然,当游戏中存在多个同名单位时,用户仍然可以通过输入完整的单位Id来指定创建特定的单位。
  • 若输入作弊码时,用户的焦点在游戏窗口内,且鼠标位于场景地图中,则创建单位、物品的作弊码会优先将单位和物品创建在用户鼠标所在的位置。
  • 除此之外,用户每次输入作弊码时,我们还会在官方聊天框内显示更多反馈信息,如特定作弊模式的开关状态,创建的单位、物品是否成功,以及他们的个数与坐标。

我们还加入了全新的作弊码Effect

缩写:e

语法:Effect 效果Id

该作弊码的作用是直接对着当前选中单位或者鼠标位置(如果没有选中单位)执行指定Id的效果,施法者设置为当前玩家的主控单位,如果没有主控单位,则选中单位自己给自己执行效果,如果也没有选中单位,该作弊码将不生效。

效果节点可视化调试模式VRP优化

效果节点可视化调试模式作弊码VisualizeRefParam(缩写VRP)在技能效果树调试中起到了很好的作用,但当场中所执行的效果树太多时,用户可能会被界面上杂乱的效果树可视化信息所影响。

为此,我们针对VRP作弊码做出了以下的改进:

  • 在效果节点中加入了两个新的字段:在效果树可视化模式中可见,与效果树可视化模式渲染验证。
  • 在效果树可视化模式中可见的默认值为真,若取消勾选,则对应的效果节点将不会在作弊模式下显示出来。
  • 效果树可视化模式渲染验证则是一个额外的规则化验证器,若用户对一个效果节点设置了这一验证器,那么该节点的可视化信息只会在验证器通过时才会显示。比如,用户可以通过这一验证器来实现“当前节点只会在通过某个特定路径执行时才会显示可视化信息”这样的逻辑。
  • 非持续性节点的效果信息显示时间默认为1秒,有时候可能会导致用户来不起看清所有必要的信息。为此,我们增加了K键为效果树可视化模式下的特殊快捷键。在可视化模式下,用户若按下K键,则场景中所有的效果树可视化信息将持久显示,不会随时间而消失。再次按下K键将可推出这一模式。
  • 此外,我们还对效果节点可视化模式进行了一些其他的改进:
  • 当技能施放时,会绘制一个体现技能施法范围的圆。
  • 当搜索效果执行时,可视化模式会指示该搜索效果搜到的所有单位,并在它们脚底下绘制紫色的圆,圆的尺寸体现了这些单位各自的可搜索范围。

富文本斜体与下划线标记的支持

星火编辑器的本地化文本中,加入了斜体和下划线标记的支持。它们的格式为。

<i>斜体</i> <u>下划线</u>

除此之外,<b>粗体</b>也是一种已经受到支持的富文本标记格式。

技能同步逻辑

在过去,客户端逻辑基本上只能获得可见玩家的主控单位的技能数据。但是有时候我们可能想要显示当前玩家的非主控单位的技能列表,甚至显示盟友单位的技能列表。为了扩展星火编辑器所支持的游戏品类,我们改善了技能系统的同步逻辑:

主控单位的技能同步方式依然按旧有逻辑不变。(在今后,我们还考虑加入允许用户自定义主控单位技能同步方式的功能)

所有的技能加入了技能同步方式字段,当技能不属于你的主控单位时,用户依然可以通过修改该字段来决定指定技能的信息和冷却时间能否被指定客户端获取。

  • 无:该技能在非主控单位身上时不会同步给客户端。
  • 自己:该技能在非主控单位身上时只会同步给单位所属的玩家。
  • 同阵营:该技能在非主控单位身上时只会同步给同阵营的玩家。
  • 有视野:该技能在非主控单位身上时只会同步给对该单位有视野的玩家,处于隐藏状态时不会同步。
  • 总是可见:该技能在非主控单位身上时会同步给所有玩家。
  • 自己+视野:该技能在非主控单位身上时只会同步给所属玩家以及对其有视野的玩家,即使是隐藏状态也会同步给所属玩家。
  • 盟友+视野:该技能在非主控单位身上时会同步给同阵营玩家以及对其有视野的玩家。

配合新的技能同步逻辑与我们最近加入的自定义摇杆功能,用户将可以很容易地做出可以使用多个移动摇杆和技能摇杆来操纵多个单位的界面机制。也可以很方便地制作“施放来自其他玩家的共享技能”的机制。

等待与线程管理

在星火编辑器中,每个触发器执行时都会产生一个触发器线程,而触发器中每一个等待动作在幕后都隐含了复杂的线程调度。

在这次更新中,我们加强了用户对等待与触发器线程管理能力。

客户端与服务器触发器中增加了新的对象类型:触发器线程。一个触发器线程基本上相当于一个执行中的触发器运行实例。可以用来与其它的触发器线程相比较,也可强制停止一个触发器实例。

触发器线程类拥有以下相关的功能

  • 静态方法:当前线程。该方法可以在任何时候获取当前在执行的触发器线程对象。
  • 方法:挂起。可直接暂停并挂起一个执行中的触发器线程。
  • 方法:继续。使一个挂起的触发器继续执行。
  • 方法:停止。可以强制结束一个触发器线程。
  • 成员:是主线程。可以判断指定的触发器线程是否是游戏主线程。
  • 成员:状态。可获取指定线程的状态。可能的线程状态有『运行』『挂起』『等待』『结束』

执行触发器动作现在增加了一个新的参数:是否等待。当使用该触发器执行一个新的触发器时,可以决定当前触发器是否等待新触发器执行完毕才执行下一个语句。默认值为否。该触发器语句现在也可以作为函数使用,此时会返回一个触发器线程对象,该对象为新触发器处的线程。

此外,我们还为客户端触发器增加了缺失已久等待一段时间动作

通用物品/奖励显示控件

我们在UI编辑器中增加了新的物品显示控件,名为多功能格子,该控件可以用来显示一个单个物品或奖励。

  • 可以指定显示一个特定物品类型或者奖励类型。
  • 可以分别指定是否显示物品/奖励的边框、背景、剩余次数。
  • 可以指定能否使用物品。
  • 同时指定以上两者时以特定物品/奖励类型为优先。

触发器动作组

触发编辑器增加了全新的动作组概念,可以通过名为“动作组”的触发器动作来构建。动作组可以将一串连续的触发器动作整理成组,其功能类似于触发器树状图中的文件夹。

组中的触发器动作可以整体地折叠和展开,并可通过组名进行归类。

用户可以在任意一个动作组中声明组中专用的局部变量,此一功能打破了星火触发编辑器无法随地声明局部变量的限制。

数据编辑器

  • 我们进一步优化了数据编辑器中效果节点蓝图编辑器的静态判定,现在数据编辑器可以更加准确地对效果树进行推测,提前找到更多可能有问题的配置方式。
  • 增加了新的效果节点类型:『修改多段连击技能段数』。可修改当前技能或者指定技能的多段连击段数。有关多段连击技能的详细信息,请参考上文中的『多段连击技能的支持』一节。
  • 增加了新的效果节点类型:『修改技能冷却』。可修改当前技能或者指定技能的冷却。
  • 移除Buff和移除移动器效果节点现在拥有了『全部』选项,可以移除目标单位身上所有符合指定条件的Buff和移动器。
  • 任意技能响应节点现在会为引发响应的效果节点设置引发技能与施法实例,用户可以直接从引发响应的效果节点中拿到引发响应的技能。(此前只能使用效果节点引发响应的技能函数来进行判断)
  • 现在当Buff被禁用时,Buff上附加的表现也会相应地消失,并在重新启用时再次出现。
  • 自动拾取生效的物品增加了一个新的字段:丢弃后自动拾取延迟。当自动拾取的物品被丢弃后,会等待指定的时间才会变为能被再次自动拾取,以避免出现刚刚被丢弃的物品会立刻被自动再次拾取尴尬场面。默认值为-1,代表丢弃后永远不会自动拾取这一物品。
  • 为所有的官方样例技能配置了图标。
  • 在『被动技能』分类中增加了『旋转碰撞回旋镖』技能。这是一个模拟圆型弹道物理碰撞的技能,可以尝试一下。
  • 在『通用攻击』分类中增加了『三连击』技能。这是一个更建议的实现『连击』的思路。

触发编辑器

  • 自定义预设值现在也可以配置悬停提示了。
  • 触发器函数的悬停提示现在会显示函数的返回值类型,当所允许的参数是多种类型时,这一功能应当有助于用户分清当前所选择的函数是否会返回想要的类型。
  • 在触发器的类型选择界面中,立即值类型被改名为了基本类型以免与值类型中的立即值产生混淆。数编Id类型改名为了数编Id:任意类型,以免产生歧义。
  • 触发器自定义脚本文件夹现在会递归地支持子文件夹中的文件了。
  • 所有的循环遍历动作现在都可以添加局部变量,以与旧版的遍历动作提供相近的体验。
  • 为单位状态添加/删除状态动作现在有了更多可以添加/移除的状态:
  • 暂停技能:会暂停单位的技能计时器与冷却更新。
  • 暂停Buff:会暂停单位身上的Buff计时器更新。
  • 暂停:会暂停整个单位。
  • 增加了新的可暂停/取消暂停单个单位的动作。
  • 单位类型对象增加了全新的AI字段,用户可通过该字段获取指定单位身上的AI实例,也可以通过AI实例获取该AI所配置的AI搜索器。通过AI搜索器,用户可自定义AI的目标验证逻辑与目标排序逻辑,也可以令AI无视指定的单位一段时间。AI搜索器还可直接在触发器中执行以模拟AI单位的搜敌行为,并可返回一个符合搜索器配置逻辑的最优先的目标单位。
  • 单位和物品类型对象现在拥有了是否已被移除字段,可判断该单位或者物品是否已经被移除。
  • 客户端触发器现在增加了等待一段时间动作。与服务端的等待动作对应。
  • 服务端和客户端触发器的点对象现在增加了设置高度的方法。
  • 施法实例对象现在可以通过面向对象方法来获取自己的技能实例。
  • 客户端现在也增加了单位身上所有技能的API。请注意,当客户端尝试获取非主控单位的技能时,需要配置技能的同步方式,详情请参考上文中的技能同步方式段落。

预制功能

大厅商城已经支持游戏内使用

之前较长一段时间,我们并不建议大家在游戏内使用大厅的预制功能,主要原因是在大厅中使用预制功能(例如大厅商城)可以排除游戏本身逻辑带来的问题,降低游戏运营中的风险因素。

但是近期我们观察到有开发者制作了具有较高表现力的单人游戏(例如《黎明怪物潮》),在单人游戏下,大厅核心的模式功能已经不再是必要的流程。

正是由于这样游戏的出现,我们决定将一部分规划提前:投入开发资源对主要的大厅预制功能进行逐个改造,确保这些功能能够安全的在游戏内运行。

本次更新我们已经完成了对预制功能-大厅商城的改造,大家可以在界面编辑器中拖出对应的按钮作为游戏内启动商城的按钮。

通用背包细节调整

客户端触发新增『打开左侧背包』、『打开右侧背包』;可以通过此功能独立的调用AB两种显示类型的背包。

对无AB类背包的UI进行了调整和适配,更方便开发者使用自己的自定义背包。

A类背包的剪影支持隐藏,可以在通用背包设置中勾选隐藏。

后台消息

新增『后台消息』预制功能,开发者可以利用创作者中心对所有游戏中的玩家发送此消息。

我们提供了3分钟后关闭游戏的默认功能以及自定义功能。

建议所有的游戏都对接此功能,可以通过此功能向游戏内玩家发放在线奖励、关服通知、更新通知等。

其他优化

  • 之前有一段时间,在『我的资源』中进行资源的编辑时,大家可能会偶然发现一些不规律的状态:比如有时候可以编辑动画,有时候又不可以。实际上这是由于一些底层设计和一些历史遗留问题共同作用带来的结果。这一次更新后,我们会确保所有的有编辑权限的模型都可以按预期中的功能进行编辑操作,希望能减少开发者使用过程中的困惑。
  • 官方文档已经去掉了对是否有内测资格的白名单校验,只需要TapTap登录即可正常浏览。
  • 调试信息新增两种信息:

「客户端单位数量」 ——客户端内存中的单位数量 「屏幕内及附近单位数量」 ——客户端当前正常活跃的单位数量

仙侠MOD相关

  • 优化了仙侠MOD充值流程的相关交互
  • 新增唤起充值页面的API和触发

错误修复

  • 修复了官方样例技能中火龙单位用于展示自定义移动器功能的弹道碰撞表现。
  • 修复了官方技能样例中重生技能。
  • 修复了官方技能样例中暴风雪技能粒子效果在特定情况下无法正确渲染的问题。
  • 修复了官方技能样例中冲锋陷阵技能动画在特定情况下无法还原的问题。
  • 修复了通用物品栏机制中背包面板和拾取物品面板在被点击时会触发被面板盖住的单位的点击事件的问题。
  • 修复了通用商店机制中,部分奖励类型(如效果奖励)的图标与描述没有正确显示的问题。
  • 修复了吸血鬼模版在部分条件下无法正常启动的问题。
  • 修复了数据编辑器会保存一些无用的空文件的问题。
  • 修复了触发编辑器中修改类成员时,一些配置没有正确显示出来的问题。
  • 修复了编辑器安装包默认安装到Program Files(x86)文件夹的问题(应为Program Files)。
  • 修复了几个常用数编表类型在触发器类型选择界面中所属分类不正确的问题。隐藏了不该显示在数编中作为可选节点的抽象节点类型Buff单位组。该节点是所有Buff单位组相关节点的抽象父类,本身不应当作为可用的效果节点显示出来。
  • 修复了在项目管理器中打开手动删除的项目时未做正确提示的问题。