游戏对象的属性和属性自定义
在星火编辑器中,自定义属性的实现为游戏开发者提供了强大的灵活性,允许开发者根据自己游戏的需要定制和扩展游戏的功能。以下是自定义属性实现的简化和优化步骤:
属性的作用和存在意义
属性用来描述对象所具有的特定特征。星火编辑器预设 了单位属性、玩家属性、技能属性、游戏属性,同时提供了一些描述它们特定特征的属性。
在星火编辑器中,属性是保存在对象上的特殊变量。星火编辑器会根据设定的同步规则,自动在服务器和客户端间同步属性,但不会自动同步对象上的普通变量。
单位属性
单位属性是作用于单位对象上的一系列数值。
单位数值属性由基础值、百分比变化值两部分组成;基础值 * (100 + 百分比变化值) / 100 得到实际参与游戏运行的最终值; 在需要选择单位数值属性类型的地方,可以选择的内容有:
- 最终值(实际值)
- 基础值
- 百分比变化值
部分单位属性实际是由两个数值合并而成。
实际值 = 基础值 * (1 + 百分比 / 100)
此外,在数据编辑器中可以定义自定义属性,提供单位属性的所有基础支持,但没有对这个属性做任何假定和实现,你可以自由地决定它叫什么和干什么。
下面是一些常用的编辑器内置单位属性:
攻击
在星火编辑器中,「攻击」只是单位的一个普通属性,伤害是由数据编辑器蓝图中「伤害节点」决定的:你可以让一个1000攻击的单位,每次造成1点伤害,只需要你把伤害节点的伤害写成1;也可以通过公式,让这个伤害值=攻击*50%(或者任何公式)。
在这之后,会走到 [伤害结算] 流程中,根据公式对伤害进行实际的结算,造成最终的「效果」。
护甲
在[伤害结算]中,护甲
会在[伤害初始化]事件和[伤害开始]事件之间对伤害做一次修正。
- 当护甲大于0时,每1点护甲可以使单位多承受1%的伤害,此时伤害算法为
最终伤害 = 伤害 / (1 + 护甲 * 0.01)
- 当护甲小于0时,每1点护甲会使单位受到的伤害提升1%,此时伤害算法为
最终伤害 = 伤害 * (1 - 护甲 * 0.01)
生命
在[伤害结算]中,在[伤害前效果]事件之后,受到伤害的单位会被扣除最终伤害数值的生命
。如果单位因此次扣除生命导致生命变为0或者以下,则会触发[伤害击杀]的结算。
值得注意的是,生命
与单位是否存活之间没有必然的关系,直接将单位生命设置为0,并不会发生任何事情,只是这个单位在下一次受到伤害会触发[伤害击杀]的结算(判定成功才会死亡)。
- 单位的生命无法小于0,也无法超过[生命上限]。
- 百分比无效
生命上限
单位的[生命]无法超过生命上限。
- 修改生命上限会 导致单位的[生命]按比例缩放。
生命恢复
单位每秒会增长的[生命]。
- 当单位死亡时,该属性会暂时失效。
魔法
技能中需要用到的属性,请参考[技能]中的详细介绍。
- 单位的魔法无法小于0,也无法超过[魔法上限]。
- 百分比无效
魔法上限
单位的[魔法]无法超过魔法上限。
- 修改魔法上限会导致单位的[魔法]按比例缩放。
魔法恢复
单位每秒会增长的[魔法]。
- 当单位死亡时,该属性会暂时失效。
攻击速度
影响单位[普通攻击]的冷却时间和[普通攻击]的动画表现。
移动速度
单位每秒能移动的距离。
冷却缩减
单位技能冷却时间减少的比例。
- 该值为
40
表示技能的冷却时间减少40%
。
减耗
单位技能魔法消耗减少的比例。
- 该值为
40
表示技能的魔法消耗减少40%
。
攻击范围
攻击范围总是等价于单位当前[攻击技能]的施法范围。
- 百分比无效
搜敌范围
这个值决定了[搜敌器]在搜索附近敌人时,搜索范围可以超出[攻击范围]的距离。
视野范围
单位提供视野的范围。请参考[视野]的介绍。
单位标记
[单位标记]虽然作为一个单位属性,但不要使用操作单位属性的api来访问和修改它。请使用它的相关api来操作它。
等级
用于[单位升级],表示单位的当前等级。
技能点
决定单位是否可以学习技能。学习技能需要消耗技能点。
在物品中使用单位属性
当需要在物品上保存一些数值类型或者字符串类型的值,并且需要它们自动在服务器和客户端中同步,可以将这些值存入[物品]对应的[物品单位]的单位属性中。使用时,通过API[物品在地上时的单位]获取[物品单位],从而获取到保存在物品上的值。
技能属性
技能属性只有数值类型。
SCE预设了部分技能属性,它们没有内置逻辑,根据需要自行设计逻辑或者创建新的属性使用。
玩家属性
玩家属性是玩家对象上的一系列数值,和单位属性一样,玩家属性也会在改变的时候同步到客户端。
自定义属性的实现
数据编辑器中的配置:
- 在星火的数据编辑器(数编)中,可以通过常量配置设置自定义属性。这些属性可以是针对单位、玩家、游戏或技能的。
- 自定义属性通过在[Constant]部分定义。
- 服务器对这些属性的含义不关心,只在同步方式允许的情况下将数值转发给客户端。
- 某些自定义属性可以用于客户端UI(针对默认UI)和服务器脚本库。
自定义玩家属性: 在星火编辑器的数据编辑器中,玩家属性内嵌入于特定的位置,如下图所示。
单位属性:
- 星火编辑器提供了21个内置属性和178个自定义属性。
- 其中16个属性是引擎内置,确保基础设施正常运作,不可禁用。
- 另外5个属性由脚本库和客户端UI支持,可在有能力修改这两部分内容时被移除。
- 详细介绍可以在单位属性中找到。
添加和使用自定义属性
创建自定义属性: 在数编中添加自定义属性时,需要定义显示名称、唯一ID(必须唯一)、说明文本(对属性的解释)、数据类型(数值或字符串)、脚本名称,如下图所示。
使用自定义属性: 自定义完成后,这些属性可以在单位的初始属性中找到,表示属性已成功定义,如图所示。
触发编辑器中的调用: 已经定义好的属性也可以在触发编辑器中配置自定义属性,用于单位或游戏逻辑的调用。
通过这些步骤,开发者们可以在星火编辑器中灵活地创建和使用自定义属性,从而丰富游戏的功能和交互性,提升游戏的整体体验和可玩性。