2024年1月10日星更新日志【2024.01版本】
物品栏格子的动态添加和锁定
在过去,每个物品栏的格子并非独立的数编节点,而是物品栏节点的子属性。但为了给物 品栏系统添加新的功能,我们也为物品栏格子增加了独立的节点类型。
- 点击数据编辑器左侧列表左上角的齿轮可以勾选并显示独立物品栏格子数编类型。用户将可以在这里添加和配置独立于物品栏之外的的物品栏格子。
- 此后,使用全新的触发器动作添加物品栏格子并指定一个物品栏格子配置,用户将可在游戏运行中途为单位身上的指定物品栏动态地添加更多的物品栏格子。
- 此外,物品栏格子现在也支持锁定和解锁操作。被锁定的物品栏格子将无法存放物品,若锁定时其中已经存在物品,则所存放的物品也会被强制移出格子。用户也可以在需要的时候使用解锁物品栏格子动作解锁被锁定的物品栏格子。
单位创建信息效果节点
在某些情况下,用户通过触发器拿到一个召唤单位,或许会想要知道该单位是由哪个单位所召唤出来的,甚至希望将召唤单位的属性与召唤者,甚至召唤该单位的Buff、物品的属性挂钩。
- 为此,我们在触发编辑器中的单位类中增加了获取创建信息效果节点方法。调用该方法后会返回一个特殊的效果节点,该效果节点与普通的效果节点类似,可以获取效果节点的施法者、引发技能、引发物品、引发Buff和父效果节点。此时,若单位是由其他单位召唤得来,获取效果节点的施法者将可获得当前单位的召唤者,而获取效果节点的引发技能、引发物品和引发Buff将可获得召唤了该单位的技能、物品和/或Buff(如果有的话)。获取创建效果信息节点的父节点将等同于获取创建了该单位的效果节点(通常是一个创建单位效果节点)。
- 若指定单位并非是由任何单位召唤出来的,则其创建信息效果节点的施法者会是该单位自己。
单位碰撞类型扩展
在过去,单位节点的碰撞类型字段只有两种选择:英雄碰撞和非英雄碰撞。相同碰撞类型的单位会互相阻挡,而不同碰撞类型的单位可以互相穿越。这也是为什么默认情况下你的英雄可以从重重怪物的包围中脱身的原因。 但随着星火编辑器的发展,两种碰撞类型已经难以满足日渐复杂的用户需求。因此我们将这个字段扩展成了8个复选框。其中英雄和非英雄分别是其中两个复选框,在此基础上,还增加了6个额外的自定义碰撞复选框。
而新的单位碰撞类型规则如下:当两个单位拥有重复的碰撞类型选项时,这两个单位会互相阻挡。而当两个单位各自勾选的碰撞没有重复时,这两个单位就可以互相穿越。 在这种机制下,用户将可以用这8个复选框制作出最多256种组合的碰撞方式,进一步强化了碰撞类型的自由度。
客户端单位回收优化
本段内容技术术语可能较多,读者可酌情观看: 在绝大多数情况下,星火编辑器的用户不用担心垃圾回收和内存泄漏问题。星火编辑器内部能帮助用户处理好一切。 但在一些特殊情况下,这些优化可能会引发一些令用户意外的后果。其中客户端单位的资源回收就是最典型的例子。 星火编辑器的用户可能习惯于使用“在对象上保存任意值”动作的便利性。但当把这一动作用在客户端单位上时,却有一些特别需要注意的地方,这里涉及到星火编辑器引擎的一些内部机制——
对于每个客户端来说,其实各个客户端并无法知道服务器上所有单位的状况。举例而言,当一个单位脱离了当前客户端玩家的视野范围(若视野迷雾机制被打开),或者跳转到了当前客户端玩家看不到的场景中时,对于客户端来说,该单位的信息将不再可知。即使该单位在迷雾中或者其它场景中已经被服务器销毁,客户端也是无法得知这一信息的(也并不应该得知,这是星火编辑器反作弊的机制之一)。
在这类情况下,客户端无法预知该单位是否还会 回归,因此如何处理用户保存在该单位身上的任意值便成为了一个难题。显然,如果客户端无限地保存这些数据,对于那类无限刷怪类型的游戏将是很不利的。在整场游戏过程中,服务器可能会创建数万的怪物,它们不停地刷新并死亡。如果用户在这些怪物身上都保存了任意值,而这些任意值都没有被回收,造成的内存泄漏将是十分可怕的。
为此,星火编辑器的客户端单位有这样一个优化:当一个客户端单位离开当前客户端的可知范围一定时间后(默认为20秒),其携带的所有信息将被销毁。当该单位再次出现在客户端视野中时,客户端将通过服务器所提供的信息重建该单位。显而易见,此时,如果用户曾经在该单位的客户端保存过任意值,这些值都已经被清空。
如果用户希望无限期地某些客户端单位身上的任意值,也有多种解决方案可以选择。其中最佳实践为将想要保存的客户端单位存储在一个全局变量数组或者Map中,在这种情况下,即使单位脱离了可见范围,其信息也不会被自动释放。此外,用户也可以选择将一些必要的数据保存在该单位的服务端单位属性中,在这种情况下,客户端每次重建该单位时都会同步到这些属性。
除开这些途径外,我们还为用户提供了更加简单的解决方案——某些用户的项目可能全程出现的单位数量十分稀少,即使全部不自动回收也不会造成什么问题,又或者希望设置更长或更短的客户端单位回收时间。对于这样的用户,我们开放了客户端单位回收时间自定义功能。
用户将可以通过点击数据编辑器左侧列表左上角的齿轮,勾选游戏机制设置来显示默认游戏机制设置。在默认游戏机制节点中,我们增加了客户端单位刷新时间字段。用户可以随意地增加或者减少客户端单位的回收时间,此外,若在此填入负值,则代表客户端单位上的自定义数据永远不会被回收,直到当前游戏局结束。
多人协作优化
今后,新建项目的模版将会带上默认的.gitignore文件,方便使用git来进行版本控制的用户使用。该文件会自动忽略所有会在编辑器保存时自动生成的文件,方便用户挑选出所有必要的配置文件来进行提交。
此外,需要注意的是,由于编辑器采用了快速保存机制,因此从git上拉下来的新配置文件默认不会触发编辑器的全新保存。这会导致你的触发器尽管拉到了最新改动,但保存时生成的脚本却不一定是最新的(除非用户手动修改了数编数据和触发器数据并进行保存)。为了简化这一操作,我们还在所有新建的项目文件夹中增加了一个update_file.bat文件,只要执行该批处理文件,它就会自动清除项目文件夹中的保存时间戳,保证当用户下一次点击保存或调试按钮时,生成的数编数据和脚本总是最新的。
地形编辑器
-
在地形编辑器中选中一个或多个单位后,现在可以通过按下数字键0-9来快速改变所选单位所属的玩家号。
-
地形编辑器自动生成小地图时,现在支持生成长宽不一致的长方形场景地图正确生成小地图了。旧有的长方形场景地图项目需要重 新填写小地图尺寸并点击重新生成按钮才能生成正确的小地图。
技能样例
默认技能样例中增加了一个可以通过蓄力来增大碰撞范围的火球术技能。施法范围光标也会随着蓄力的时间而增大。
数据编辑器
- 在技能的AI配置节点加入了一个AI忽略该技能的选项。AI不会主动使用勾选了该选项的技能。适合用来制作需要通过脚本精密控制的Boss技能。
- 技能配置中的是否显示冷却现在也可以管理技能的充能冷却显示了。
- 批量导入导出CSV表格时支持utf-8和GB格式了。
- 技能配置中的显示施法进度标旗现在对无限蓄力技能也有效了。
- 在模型节点、粒子节点进行资源选择时,将会对非此类的资源进行过滤。
触发编辑器
- 我们优化了名字型云变量在触发器中的悬停提示和描述,帮助用户更好地理解名字型云变量的用途和用法。
- 服务器/客户端触发器现在有了相同的乘方、开方、次幂函数。
- 服务器/客户端触发器现在有了相同的字符串格式化函数。
- 我们为更多未归类的触发器动作、事件和函数添加了分类。