跳到主要内容

2024年10月23日更新日志【10版本】

本次更新为公测版本更新。

除部分严重BUG修复会覆盖旧版本,以下新功能均在编辑器版本10中生效。

开发者可以在编辑器顶部菜单-编辑器版本中进行版本切换。

UI场景

星火编辑器现在支持直接在UI上显示3D场景,并可在其中创建和操作客户端单位和表现。为方便大家使用,星火编辑器引入了『UI场景』的概念。

『UI场景』实际上是两个概念的结合体,用户需要通过客户端触发器来创建和操作后台UI场景。但UI场景在被触发器创建后只是一些内存中的代码,它们仍需要通过界面编辑器的UI控件才能被显示出来,因此用于显示的『UI场景控件』和被显示的『UI场景』其实是两个不同的对象。

UI场景控件

现在要显示UI场景,用户需要在界面编辑器中拖出用于显示UI场景的矩形。打开界面编辑器后,用户可以在『组件库』中找到名为『UI场景』的控件。用户可将一个或多个UI场景控件拖拽到页面上,并调整它们的位置,为后续的场景展示做准备。

UI场景

要展示一个UI场景,需要先创建一个UI场景对象,并将其绑定到想要显示它的UI场景控件上。

可以通过触发器『创建UI场景』来创建一个新的UI场景。该函数返回新建的UI场景,并可选择是否在场景中显示阴影,以及是否加载指定的地遍场景。

是否使用阴影

  • 决定UI场景中是否计算单位和表现的阴影,阴影会占用额外的渲染资源。此外,只有在数编地图设置中关闭『预计算场景阴影』高级选项才能在UI场景中显示阴影。

加载地编场景

  • 决定UI场景是否会加载指定的地编场景,如果是,会将指定的地编场景整个载入到UI场景中。但不会包含地上的单位、点和区域。

  • 除非有特殊必要,用户不应该加载过大的地编场景,因为地编场景会消耗额外的资源。

默认镜头

  • 该参数可以指定一个地编镜头,UI场景在绑定到控件以后会展示这个镜头在UI场景中看到的内容。默认情况下会指定一个查看0,0点位置的第三人称镜头。用户可以选择自己设定的镜头。

  • 需要注意的是,用户在想要指定自定义镜头位置时应当选择『固定镜头』或者『手势控制』镜头,跟随镜头会永远位于0,0坐标位置,因为UI场景中不存在主控单位的概念。

  • 无论地图再大,一个镜头所能显示的区域也是有限的,这也是为什么不应该加载非必要的大尺寸地编场景的一个原因。

UI场景创建完成后,可通过一个变量记录其返回的UI场景对象,并试用其面向对象方法来在场景中创建、设置单位和表现,并将其绑定到UI场景控件上用于显示。以下列举一下常用的UI场景面向对象方法:

绑定UI场景

  • 立刻将UI场景与指定的UI场景控件绑定(UI场景控件可通过通用的『获取下属控件』函数来获得),使UI场景的内容显示到指定的控件上。『绑定UI场景』方法还可指定控件是静态还是动画绘制指定的UI场景,若选择静态,则控件上显示的画面将永远静止,只会持续显示绑定的那一瞬间UI场景的内容。若不选择静态渲染,则控件会实时反映所绑定的UI场景的变化。

解除绑定UI场景

  • 使UI场景与UI场景控件解除绑定,控件不再显示UI场景的内容。

销毁

  • 摧毁UI场景,释放其所占用的资源。

  • UI场景会占用额外的资源,用户应当及时对不再使用的UI场景进行清理。

  • 切忌每次显示控件时反复创建额外的UI场景且不清理旧的UI场景,这可能导致多次显示控件后,后台大量的UI场景对象堆积。

创建单位/创建表现

  • 在UI上显示3D场景通常并不仅仅是为了显示一块光秃秃的地形。因此星火编辑器允许用户像对待普通场景一样,在UI场景里创建和空值单位以及表现。

一个最简单的示例

UI场景单位和表现的特性

使用UI场景的『创建单位』和『创建表现』面向对象方法,用户可以在UI场景中创建数编中指定的客户端单位和表现。这两个函数分别返回所创建的单位或表现对象。UI场景中的客户端单位和表现比普通的单位或表现功能少一些,但依然共享大部分的面向对象方法。

UI场景支持创建单位以及以下几种数编表现:

  • 单位节点

  • 模型表现节点(持续性和一次性)

  • 粒子表现节点(普通和一次性)

  • 附属模型表现节点

  • 光束表现节点

  • 材质表现节点

其它类型的表现节点无法正常在UI场景中创建。

UI场景中的单位和表现可以通过面向对象方法执行以下操作:

  • 播放(粒子表现)

  • 附着到同场景中的单位或者表现

  • 播放动画(通过客户端高级动画API,请参考7月更新日志中的『客户端高级动画支持』段落)

  • 替换模型资源(仅限单位和模型表现节点)

  • 设置XYZ缩放

  • 设置坐标(点)

  • 对UI场景中的单位或表现设置坐标时,如果传入的坐标点属于其它场景,不会令单位或者表现跳转场景,仅会使用点中所指定的XYZ坐标来设置单位/表现的位置。

  • 设置XYZ坐标

  • 销毁(移除UI场景中的单位或表现)

注:用户只能通过面向对象方法来操作UI场景中的单位和表现。此外,UI场景表现在设置高度时需永远指定绝对高度,无法指定地形相对高度。

UI场景的一些其它操作

用户可以通过UI场景的面向对象方法对UI场景做出一些其它的改动。

调整视口尺寸

  • 该动作允许用户手动调整UI场景控件所展示的内容的分辨率。当UI场景绑定到控件时,会自动根据控件的当前尺寸来设置视口尺寸(即分辨率),但用户可以在绑定操作完成后手动设置视口尺寸,以调整控件内容的分辨率。

设置镜头

  • 为UI场景指定一个新的地编镜头,对应的UI场景控件将显示新镜头所看到的内容。

设置镜头位置

  • 以XYZ坐标的方式来设置UI场景镜头的位置

设置镜头旋转

  • 以XYZ旋转的方式来设置UI场景镜头的旋转

模拟多人调试

星火编辑器做的游戏自带服务器,非常适合多人游戏。但是在过去一段时间,多人游戏的调试一直有一定的门槛:开发者需要有多个设备,还无法比较方便的查看日志。

本次更新我们为开发者提供了『模拟多人调试』功能,可以进行最多4个玩家的模拟多人调试。

此外,还可以通过设置『延迟连入时间』来模拟不同加载速度的玩家体验。

开始调试后,可以通过点击调试顶部的『暂停』,这一动作将直接触发『玩家-断线』事件

在『暂停』状态下,点击恢复,这一动作将直接触发『玩家-重连』事件

虽然以上功能可能无法完美的复刻实机的复杂环境,但是应该可以帮助开发者更简单的编写出更为可靠的断线重连逻辑。

此外,客户端的日志会自动带上玩家编号,方便开发者理解『一局多人游戏,只有一个服务端,但是有多个客户端』的基本逻辑。

提示

使用多人调试时若出现类似于『未找到玩家[2]的玩家信息』,则需要去『数据编辑器-地图设置』里为玩家2添加一下调试时的ID。
玩家1默认ID已有,是100。

自定义物品提示信息面板

星火编辑器提供了许多自定义物品提示信息的功能。但不少用户依然希望能对默认的物品提示信息窗体进行进一步的修改和自定义。

为此,星火编辑器重构了物品提示信息面板,并在界面编辑器中加入了7个全新的页面,方便用户从各个维度对物品的提示信息面板进行修改和自定义。目前可供用户修改的物品页面包括:

  • 拾取道具模版

  • 物品信息_词缀描述模版

  • 物品信息_属性需求模版

  • 物品信息_物品属性模版

  • 物品信息_物品信息模版

  • 自定义UI拾取列表页面

  • 自定义UI物品信息页面

用户可以在以上所有的界面页面中自由地插入、隐藏和修改UI元素。此外,客户端触发器还增加了『物品提示信息框显示』事件和『物品提示信息框隐藏』事件,用户可以从这些事件的参数中获得被显示/隐藏的物品提示信息框体,以及正被显示的物品对象,方便用户在物品提示心面板中插入与物品有关的额外自定义元素。

目前,仍有一些注意事项需要了解:

  • 有多重状态的按钮无法改变样式,例如『装备』、『使用』按钮

  • 需求属性的背景样式无法改变

  • 改变布局的过程中,可以添加新的控件,但是不要删除原有的控件,也不要添加与已有控件同名的控件

骑乘系统和上半身旋转施法样例

为了方便星火编辑器用户更好地利用骑乘系统,我们简化了骑乘系统的使用方式,并在数编样例中增加了骑乘系统的一些相关样例。

数编默认样例中加入了一个骑乘英雄样例和坐骑单位样例。当骑乘英雄作为主控单位靠近坐骑单位,且双方不互相敌对时,屏幕中心会出现一个『骑乘坐骑』的按钮,点击该按钮后,英雄将骑乘到坐骑上,此时玩家可通过移动摇杆直接控制坐骑(即使坐骑不是主控单位)。需要注意的是,用户在测试骑乘样例时,应当记得取消选中坐骑单位的默认AI,否则摇杆移动会受到默认AI移动的影响。

骑乘完成后,屏幕中央的按钮会变成『取消骑乘』按钮,点击后英雄会从坐骑上下来,移动摇杆回到控制英雄的状态。

『骑乘英雄』拥有一个『允许转向施法样例』技能,可向着指定方向施放火球,该技能在骑乘状态和非骑乘状态下都会显示在技能栏,在骑乘状态下,『骑乘英雄』将可以旋转上半身向着任意方向施放火球,即使下半身和坐骑的朝向不变。上半身旋转将在技能前摇开始到后摇开始阶段间保持朝向目标方向,等技进入后摇后才会转回去,上半身转身速度受到单位的转身速度属性影响。观察骑乘英雄的数编配置,可以看到他勾选了『允许上半身转向施法』标旗。代表这个单位身上的技能可以在必要时仅旋转上半身来进行施法,却不影响单位的整体朝向。

观察坐骑单位的数编配置,我们可以看到它拥有一个自定义的交互行为『交互骑乘』,该交互行为拥有『骑乘』和『骑乘结束』两个交互技能,而这两个交互技能实际上是调用了触发器中的骑乘单位和解除骑乘单位的API。

如果有需要,用户也可以在游戏机制设置中,修改摇杆移动条件的通用公式来修改单位在上坐骑后的摇杆移动逻辑。在默认公式下,主控单位在乘上坐骑后,移动摇杆将控制坐骑的移动而非主控单位的移动。

客户端单位和表现的面向对象方法中也加入了『设置上半身转向角度』和『重置上半身转向角度』的API,用户也可以不通过技能来直接控制单位的上半身转向。需要注意的是,若希望上半身旋转函数生效,单位或模型表现的『模型素材节点』必须配置对应的旋转骨骼链。对于通常的捏人模型,我们建议直接复制『骑乘英雄』的数编模型素材节点的骨骼链配置。

自定义血条绑点

在过去,单位需要指定名称的血条绑点才能显示血条。在星火编辑器版本10中,我们加入了自定义血条绑点位置的功能。在单位的模型素材节点上可以看到『自定义血条绑点位置』的标旗,一旦选中该选项,血条将不再判定单位是否拥有血条绑点,而是会根据用户指定的血条偏移来决定血条的位置,若偏移设定为0,则血条会显示在单位的脚底。

触发器TS代码开发相关的改进

现在在触发编辑器的右上角增加了『跳转到生成代码』和『跳转到代码API声明』两个按钮。前者会打开当前项目触发器所对应生成的ts代码文件,而后者会打开触发编辑器核心库的API声明文件。

需要注意的是,触发编辑器只有在点击过保存按钮后才会生成代码文件。

除此之外,我们改进了核心API的声明文件,为其中的加入了对应的中文触发器函数的中文名称和对应的触发器悬停提示作为这些API的注释信息。方便用户更好地对应触发器函数与代码API。

数据编辑器

  • 普通近战单位模版失去对应的模型素材节点后,不再默认显示一个蜘蛛模型。

  • 现在如果在摇杆或WASD移动过程中旋转镜头,摇杆移动方向会自动按照当前镜头朝向来进行更新,而不会需要等待下一次按下移动摇杆或WASD按键后才会随镜头方向更新移动方向。

  • 大乱斗模板中对回旋镖技能蓝图高级事件进行修改:优化为添加到单位身上时效果。

  • 我们对坐标偏移节点的『周期性变化的基准周期』公式进行了修改,现在可以正常查看并编辑这个公式了。

触发编辑器

  • 客户端增加了获取指定坐标地表高度的API,同时服务端修改了获取地块高度API的定义和参数。

  • 对客户端单位属性的逻辑进行了一定的优化,现在客户端单位属性改变时的运行效率比之前更高。

  • Buff和技能对象现在暴露了『响应』字段,可通过该字段遍历对应技能和Buff所附加到单位身上的所有响应对象,方便用户对这些响应进行处理。如果技能或buff没有附加响应,该字段可能为空。

  • 客户端触发器增加『路线』类型,可以在客户端内选取和使用地编线,并且可以使用数编配置好的路线。

  • 服务端触发器增加『时间戳转换成日期时间』语句,可以将一个时间戳转换成日期时间对象。

  • 服务端触发器增加了效果节点的『周期索引』属性,用于『周期性效果节点-每周期执行』后续节点的公式中,可以根据当前效果节点的『效果节点.周期索引』语句获取当前是第几个周期分支。比如下面这个例子:

调试时释放该技能将会输出:

开发者可以用这个属性创造出更多进阶用法,比如根据周期索引调整目标位置等。

界面编辑器

Buff列表控件的『Buff分类过滤』和『Buff极性』属性为空时,现在不会显示Buff;只有按规则填入对应的过滤词条时,才会显示对应的Buff图标。

添加了创建页面实例失败时的报错提示,开发者可以根据该提示信息自行修复对应页面。

界面编辑器中的文本控件,现在可以更简单的实现玩家属性、单位属性的绑定,并且提供了几种常用的格式,且依然支持之前的自定义格式功能。

预制功能库

修改了局内商店和拾取提示的物品名文本框截断方式,现在可以正常显示带有富文本的名称了。

新局内聊天库的自定义聊天面板现已支持修改字体。

飘浮文字

我们注意到一些开发者的项目中,伤害或治疗引发飘字的实际值和显示值不匹配,比如伤害值为75,但实际显示为74。这是因为:该伤害值由于浮点数精度原因实际为74.99999,飘字显示逻辑中对这个数字向下取整,才会出现所谓的不匹配现象。为了避免这个问题,从2024.10版本后,伤害/治疗引起的飘字都会四舍五入成整数显示。以74.99999这个数字为例,经过四舍五入之后会正确显示为75。

数编内文字类型的飘浮文字配置现在可以选择寒蝉正楷体及其粗体(ChillKai/ChillKaiBold)作为字体了。

错误修复

  • 修复了数编组合动画选项反复勾选后,组合动画数量会不断增加的问题。

  • 修复了移除任务后,单位仍能完成该任务的问题。

  • 修复了在为单位添加模型隐藏状态并移除该状态后无法与其对话的问题。

  • 修复了拾取物品后跳转场景,物品品质光效残留到新场景的问题。

  • 修复了跳转场景后召唤物跟随AI跟随主人异常的问题。

  • 修复了设置AI参数表的时候提示调用set方法为空的问题。

  • 修复了客户端输出z值大于0的点的坐标信息时报错的问题。

  • 修复了『所有玩家连入并开始』事件的判断条件,使其在存在AI玩家时也能生效。

  • 修复了坐标偏移节点执行过程中因目标非法造成的报错。

  • 修复了触发编辑器中,变量和类成员变量勾选弃用,生成的TS代码里没有@deprecated标识符的问题。

  • 修复了造成飘字的源单位在屏幕外时,该飘字不显示的问题。

  • 修复了独立装备局项目在没有场景的情况下,无法进入装备局的问题。

  • 修复了新寻路下,单位的碰撞半径错误被当成碰撞直径的问题。

  • 修复了多层表嵌套的云变量中,数字为key的表上传后为字符串的问题。

  • 修复了模型粒子勾选不旋转,但调试时仍跟随单位旋转的问题。

  • 修复了阵列实例中出现UI粒子时,无法控制单个粒子组件播放/停止的问题。

  • 修复了动画编辑器无法在拖尾特效绑点中选择子模型的绑点的问题。

  • 修复了数据编辑器保存某些数编蓝图时,错误地把显示名字段置为空的问题。

  • 修复了数据编辑器内配置单位属性的显示格式后,该显示格式在游戏内不生效的问题。

  • 修复了特定情况下服务器死循环时,没有给出报错就直接结束游戏的问题,现在会给出死循环的错误信息和堆栈。

  • 修复了使用客户端『设置鼠标指针图片』语句更改鼠标指针图片无效的问题。