2024年7月8日更新日志【2024.07版本】
星火编辑器发布了新的编辑器版本:2024.07。
除部分严重BUG修复会覆盖旧版本,以下新功能均在编辑器版本2024.07中生效。
开发者可以在编辑器顶部菜单-编辑器版本中进行版本切换。
列表型云变量
服务端触发器中暴露了列表型云变量相关的API。并允许用户按照唯一ID来查询列表型云变量。
列表型云变量允许用户将一个云变量对象当作列表来进行存取,可以单独往列表中插入和删除值,而不需要一次性提交保存整个列表。
列表型云变量在处理大量同级别数据时非常有帮助,举例而言,用户想要在获得卡片时保存自己身上所有的卡片。若使用通常的云变量操作,不免要一次性保存下所有的卡片数据到某个云变量值中。但若在一次提交过程中,用户再次获得了一张卡片,那么这两次提交的结果就有潜在的存在冲突的可能性,比如说有可能第二次提交的内容反而先完成,被第一次提交的内容覆盖了,在这种情况下,如果处理不好,可能会导致第二次提交时的那张卡片数据没有被保存进去。
列表型云变量可以将一个云变量视为列表,并在提交过程中向那个列表插入和删除项目,在这些过程中,不会对其它项目的数据产生影响,而且只需要提交想要修改的那部分数据,因此是一个比较理想的避免冲突的方案。
在往一个列表型云变量插入条目时,可使用『添加云变量提交请求:列表型云变量新增项』触发器函数。和一般的云变量提交请求不同的是,该函数本身就会返回一个『云变量列表项Id』类型的数字。这个数字是将被插入的列表型云变量项目的唯一标识。用户可以在今后通过该标识来直接查询、修改和删除对应的列表项目。(该唯一Id在云变量提交请求被提交前就已经生成,但若后续的提交失败,则该唯一Id会失效)
注:该函数也可作为动作使用,在这种情况下用户无法获得唯一Id。但后续可以通过查询整个列表内容的方式获得表中的各个项目的唯一Id。我们推荐用户主动保存唯一Id,以节省额外的查询消耗。
用户可以通过『添加云变量提交请求:列表型云变量删除项』和『添加云变量提交请求:列表型云变量修改项』动作,并传入对应的唯一Id,来删除和修改云端对应的列表元素。需要注意的是,云变量列表项Id是全局唯一的,因此在执行删除和修改操作时,用户无需再传入云变量的名称和用户虚拟id,仅需要传入唯一Id即可。
在查询列表型云变量时,用户可以查询整个指定列表中的所有项,也可以查询指定唯一Id的项目的当前值。前者可以通过『查询列表型云变量』动作来达成,该查询需要输入用户虚拟id和云变量名,并会返回一个数据集合,列出指定列表中所有的列表项元素,包括每个元素的唯一Id。后者可以通过『查询特定列表项id的列表型云变量』来完成,仅需要输入唯一Id,变可获得对应列表元素的值。
需要注意的是,列表型云变量可以保证插入和删除操作不影响列表中的其它元素,但对单个指定元素的值进行连续修改时,仍然需要注意时序的影响。
客户端高级动画API和新动画体系
为了给用户提供对动画更好的控制能力,星火编辑器将分批次加入一些控制动画相关的API。
对于已经熟悉星火编辑 器的开发者来说,这意味着动画不再需要和数据编辑器的各类节点耦合了。
在客户端触发器中,单位和表现对象增加了新的方法:『播放动画』,与传统播放动画函数不同的是,该方支持传入许多可选参数,还会返回一个动画实例对象。
通过动画实例可以在之后对所播放动画进行进一步的修改。比如提前中止,动态修改动画的播放速度,获取当前播放进度,跳到某一帧,设置是否循环等等。
我们对星火编辑器的动画体系进行了系统性优化。限于篇幅这里仅向用户介绍与本次开放的API相关的信息:在新体系中,同一个单位\表现身上可以同时存在多个动画实例,尽管只有最高优先级的动画会被播放出来,但是被压制的其它动画实例并不会像旧体系那样完全消失,而是会在更高优先级的动画实例消失时重新“浮现”出来,即使在被压制状态,被压制的动画也依然会计算播放进度,并在“浮现”时从正确的进度开始播放。
以下列举在播放动画时可以填写的可选参数的作用,注意这些参数并非全部都需要填写。用户可以通过点击参数右侧的-号按钮放弃对对应参数的填写,此时系统就会对这些参数采用默认值。
优先级
该参数允许填写一个数字。通常来说,当多个动画实例共存时,优先级越高的动画会取胜并转入播放状态。
默认的技能施法动画的优先级为0。
该参数若不填写 ,则默认值也为0。
逻辑层
该枚举参数有四个选项,但一般用户无需理解此概念,可直接不填写或将其设置为默认值(常规层)。
逻辑层本质上是另一个层面的动画优先级,拥有着一些内置逻辑用于播放内置动画。动画系统会先考虑层级参数再考虑优先级参数。
下半身动画层:
用于类似骑马等需要维持下半身姿势的动画。如果动画参数中设置了下半身动画, 那么逻辑层会自动修正为下半身动画层。因此多数时候不需要手动设置。
回滚层:
优先度最低的层级,只有当常规层和无限制层中没有任何动画时才会被播放。只有当多个动画实例都被设置为回滚层,且优先级不同时,这些动画之间才会考虑优先级参数。
默认的移动和待机动画属于回滚层,且优先级为0,因此大部分触发器播放的动画实例都可以压制移动和待机动画的播放。
常规层:
优先度一般的层级。触发器播放的动画若不设置逻辑层参数,则默认会在这一层播放。此外,技能施法动画也处于这一层级。
无限制层:
优先度最高的层级。没有任何内置动画会处于这一层级,因此在这一层级的触发器动画必定会被播放出来,不会受到内置动画的压制。但这些动画彼此之间依然还会受到优先级参数的影响来决定谁会“浮现”,谁会被“压制”。
作用部位
全身: 默认值。指定的动画会作用于单位或表现的全身。
上半身: 指定的动画只会在的单位或表现的上半身播放。
下半身: 指定的动画只会在单位或表现的下半身播放。注意当一个动画实例设置为下半身动画时,它的逻辑层会自动变为下半身动画层。
播放速度
动画实例播放速度的倍率。1为100%速度,2为200%速度,0.5为50%速度,以此类推。
混合时间
不管是当一个动画结束播放,另一个动画因此成为最高优先级的动画而“浮现”时,或者一个旧动画实例被新的优先级更高的动画实例压制时,又或者是用户动态修改了动画的优先级而导致一个被压制的动画重新“浮现”时——在任何两个浮现在表面的动画进行交接的时候,星火编辑器不会突兀地将一个前一个动画切换到后一个动画,而是会在一小段时间内将两个动画混合到一起,平滑地过度到新的动画中。
通过设置混合时间参数,用户可以指定动画实例作为新动画浮现时与旧动画之间的混合时间,单位为秒。该参数若不填写,则默认为0.15秒。设置为0可令动画立刻切换。
典型应用案例:如果用户的模型有一个躺着睡觉的动画和一个站立动画,却没有一个从站立到躺下的动画,那么用户可以在播放睡觉动画实例时 将混合时间参数设为一个较长的值,如2秒。这样,当动画实例播放时,单位模型就会在2秒内从站立慢慢地转变为躺下状态,使用户可以低成本地实现一个从站立到躺下的动画。
初始偏移
有时候我们想要播放的动画其实并不是一个动画文件的完整过程,而是只想要截取其中一段。此时使用初始偏移参数可以告诉系统从指定的某一动画帧开始播放动画。该参数填入的值为指定的动画帧从0开始算所在的秒数。注意该秒数仅考虑原始动画素材的秒数,不受播放速度参数的影响。
是否循环
指定动画实例是否会循环播放,默认为不循环。
在动画实例被播放后,星火编辑器还允许用户通过动画实例对象对指定的动画实例进行修改和查询信息。
以下是动画实例对象当前所开放的面向对象方法:
动画实例.当前阶段()
该方法返回一个动画阶段状态枚举。『未在播放列表』代表该动画实例不存在于指定表现或者单位身上,这可能是由于指定动画实例已经播放结束,或者被用户提前移除。『普通自定义动画』则代表该动画实例 是一个普通的触发器自定义动画,且存在于宿主单位或者表现的动画播放列表中。该枚举还存在其它三个状态值,但这三个状态的应用目前我们尚未开放。
需要注意的是,在播放列表中的动画不一定是可以被用户看到的,因为可能同时存在其他更高优先级的动画实例“压制”了它。要确认一个动画是否真正是在活跃地播放中,应当使用正在播放()方法。
动画实例.主体单位()
返回当前动画实例所属的单位,若动画是在表现上播放的,则为空。
动画实例.主体表现()
返回当前动画实例所属的表现,若动画是在单位上播放的,则为空。
动画实例.动画长度()
返回当前动画的总时长,单位为秒。
动画实例.当前播放时间()
返回当前动画实例播放的进度。单位为秒。要注意的是,如果动画是一个循环动画,该函数返回的是从上一轮循环到现在所经历的时间。
动画实例.停止(淡出时间)
令动画实例停止并脱离播放列表,即使该动画目前依然在活跃播放。该方法允许设置一个淡出时间。淡出时间与混合时间的应用方式类似,可以用于设置指定的动画
实例变化到默认的移动或待机动画时的混合时间。仍然以上文中的睡觉动画为例的话,可以实现从躺下状态慢慢起身到站立状态的混合效果。
动画实例.动画资源名()
获得当前动画实例对应的动画的完整资源路径字符串。
动画实例.优先级()
获取当前动画实例的优先级
动画实例.是否循环()
返回当前动画实例是否会循环播放。
动画实例.设置是否循环(是/否)
修改当前动画实例是否会循环播放。
动画实例.播放速度()
获得播放速度。
动画实例.设置播放速度(速度)
修改播放速度。
动画实例.正在播放()
返回动画实例是否正在活跃播放。只有优先级最高且浮现在单位/表现上的动画实例才被视为正在播放。被暂停的动画也不视为正在播放。
动画实例.正被压制()
返回动画实例是否被其它更高优先级的动画压制了。
动画实例.设置被压制时是否暂停动画(是/否)
可以设置动画实例被压制时是否继续走播放进度。如果继续走,那么当动画重新浮现时会从新的进度开始继续播放,否则动画会暂停在被压制的那一刻,重新浮现时会从原地开始继续播放。
动画实例.被压制时是否暂停动画()
返回动画实例是否会在被压制时继续走进度。 今后我们将继续加入更多动画控制相关的触发器API。进一步提高用户对动画的控制能力。
技能充能自定义公式和百分比耗魔公式支持
在过去,对于冷却模式魏充能的技能,在勾选『自定义数值公式』后,用户是无法自定义充能冷却时长公式的。星火编辑器在2024.07版本更新中补上了这一缺口,在技能数值计算公式栏中增加了充能冷却公式。
此外,过去的默认公式没有考虑技能的百分比耗魔,导致勾选『自定义数值公式』后百分比耗魔一栏填写的值将会失效。在新的版本中,我们更新了默认的技能耗魔公式,将百分比耗魔也计算了进来。
镜头交互方式优化
在过去一段时间,我们同时支持了在地编中操作『镜头实例』和通过『自由视角+同步地图参数』的方式调整镜头,但是这两种方式混用,却会让最终的效果难以预料。
本次更新我们对静态操作的各种方式、参数的输入都进行了优化,确保只要开发者开启了『镜头预览』,则最终运行时的效果与预览效果完全一致。
希望用『固定镜头』做演出效果或者固定功能场景中使用镜头的开发者可以再尝试一下相关使用体验,预期过往的诸多体验问题都已经被优化和修复了。
自定义数据统计
本次更新我们提供了自定义数据统计功能。
自定义数据统计以『玩家』为核心,其使用的触发语句为『玩家.自定义统计』。
一个经典的使用场景:
某游戏有5个难度,在玩家第一次通过某个难度时,上报相关数据,于是得到了通过1,2,3,4,5难度的玩家分别为100,80,60 ,40,20。
实际上类似的能力用云变量也可以做到,但是会复杂一些,本次更新提供自定义数据统计功能帮开发者更简单的构造自己需要的数据统计。
触发编辑器
-
客户端触发中增加了『播放2D音效』的语句,方便开发者在制作UI交互效果时播放音效。该语句本质上依然是创建表现并播放,但对于用户来说可以少一些输入步骤(比如,2D音效其实并不需要输入场景坐标)。
-
用户现在可以在服务端触发器中的『Buff管理器.获取』静态方法来获取指定单位上指定数编id的buff的Buff管理器。用户可以通过Buff管理器对象的『所有表现』方法来获得对应数编Id的Buff所创建的所有表现列表。允许用户手动修改、添加和删除Buff的表现。请注意对于没有创建任何表现的Buff,该列表可能为空,在遍历列表前请注意先判空。
-
触发器中的单位状态相关事件现在统一正名为单位Buff事件,以避免对用户产生误导。(如『单位获得Buff』事件和『单位失去Buff』事件)
-
现在触发器的调试信息列表中,无法跳转的项目不再显示蓝色下划线,以免对用户造成误导。
数据编辑器
我们调整了数据编辑器左侧列表的排序规则,现在该树状列表支持更加合理的阿拉伯数字排序了。举例而言,大火球1到大火球20时,大火球10现在 会排列在大火球9的后面,而不是大火球1的后面。名称中带数字的蓝图现在应该可以看到更加合理的排列顺序了。
血条编辑器
血条编辑器的文本现在支持左/中/右对齐了。
预制功能
技能摇杆预制功能支持配置长按显示技能描述的时间了。开发者可以在『预制功能库』-『游戏操作』中找到『显示技能描述所需长按时间』,默认为3s。同时开发者还可以针对单个技能,在其技能节点中设置独立的长按时间和显示逻辑。
我们大大加快了第三方预制功能库保存时的保存速度。
创作者中心
创作者中心新增『新手引导』功能配置,我们会在游戏大厅中增加新手引导的功能模块,帮助新人更好的理解游戏的机制,此功能将有利于对新用户留存的提升。
相关配置并不强制要求开发者配置,但是对于新上线的游戏,如果配置了新人引导,我们会在结算时减免少量的服务器成本。
现在对于未配置游戏模式的游戏,在发布为创意工坊时会强制要求先配置游戏模式。避免出现游戏上线后发现没有模式的问题。
星火对战平台
修复了游戏停止测试后,玩家可以从『最近在玩』进入游戏的问题。
官方文档
对文档的结构进行了优化,增加更多一级分类结构。
对文档的搜索功能进行了优化,能更好的匹配到标题中的关键词。
问题修复
-
修复了模型类粒子偶现的播放时闪烁问题。
-
修复了点击事件中坐标参数错误的问题。
-
修复了切换场景后原场景单位阴影残留的问题。
-
修复了选取地编点、区域时,提示信息中的场景描述可能不正确的问题。
-
修复了小地图偶现的透明区间填充为白色的问题。
-
修复了多段技能配置时长时的一些问题。
-
修复了当场景地形高度不为0时,默认伤害和治疗跳字会出现在地表以下的问题。
-
修复了移动摇杆在不同分辨率下主摇杆移动范围半径可能出现异常的问题,新ui下主摇杆移动半径为0.094444时恰好与外边缘相切,即理想情况。旧项目中的旧版ui的移动摇杆可能需要作者手动调整下。