编辑器零件制作4:复刻玛恩纳的天赋“游侠”
玛恩纳的一天赋“游侠”描述为:攻击敌人时攻击力提升至113%(+3%)。周围存在3名及以上敌人时攻击力提升至118%(+3%)且受到的伤害减少15%。
简单分析一下这个天赋的效果,可以得出:
(1)这个天赋会分别对最终造成伤害和最终承受造成一次乘算。
(2)该天赋会不断检测【周围八格】射程内的敌人,也就是3*3格子的范围。
(3)该天赋效果有两种:少于3名敌人时,只有13%增伤;大于等于3名敌人时,同时拥有18%增伤和15%减伤。
因此为了复刻这个天赋,在编辑器中需要同时做增伤用的Modify和减伤用的Buff,同时还需要输入代表格子射程的二维坐标,以此对指定范围进行敌人数量的检测,根据数量的变化,改变增伤和减伤的数值。
最终用一种方式制作了两个脚本。

首先要在BuffData和ModifyData两个脚本中分别增加一条:
public UnityEngine.Vector2Int[] AttackPoints;
随后在表格中的BuffData和ModifyData部分也要插入相应的一列,用于输入坐标值。
输入的方法和SkillData中的AttackPoints是一样的,比如你需要让干员检测周围四格,那么就输入:0,0#0,1#1,0#0,-1#-1,0

随后首先创建一个Modify脚本,起名为“根据周围单位增伤”,输入以下内容:

这里定义了五种数值,分别为加攻倍率1、周围单位需求数、射程、加攻倍率2、单位类别。
其中“单位类别”在编辑器的定义中:1代表玩家,2代表敌人,3代表双方,相关脚本内容较为复杂,目前我也不太理解其中的实现过程,就不细说了。

这里的逻辑是:
(1)如果射程不等于0,就以目标单位为中心,射程Radius的数值为半径画一个圆,不断地寻找在射程中的指定类型的单位。如果获取的单位数小于周围单位需求数,就获得加攻倍率1,的加成,否则获得加攻倍率2的加成。
(2)如果射程等于0(也就是不写Radius,默认为0了),就获取AttackPoints中的所有坐标,并且把这些坐标转化成格子射程弄到一个列表里,不断地寻找在格子射程中的指定类型的单位。后续步骤和(1)相同。
随后用同样的方式再创建一个Buff脚本,起名为“根据周围单位减伤”,输入以下内容:


最后验收成果,第一个测试图在两个点位各叠加了2只0防御源石虫,叔叔攻击为1000,倍率1和倍率2分别为10和20。

测试得到的结果符合预期。


再将减伤Buff的两个值分别设置为0.8和1(也就是80%减伤和100%减伤)

周围敌人不足3个时,玛恩纳受到20%伤害。

周围有3个敌人时,玛恩纳无敌。

这样就完成了玛恩纳的一天赋。