• 就这个问题进行一个抛砖引玉的回答。

    1. 当子关卡调整后,相关联的文件是肯定会发生变动的,diff 出来并加载这个子关卡。
    2. 仅就静态的 actor 来说,加个简单的蓝图组件或者在 c++ 里面的 BeginPlay 时通过 GetWorld() 获取子关卡对应的 ULevel,然后再遍历这个 ULevel 下的 AActor。
    3. 获取 Name,Transform(location, rotator) 等想要的信息,ue 提供的接口还是非常丰富的。
    4. 按一定的格式输出到本地, 再和之前的记录进行 diff。
  • 个人理解的对于属性和技能伤害的方面的一些参考:

    • 英雄属性 (属性大概由攻,防,血,和一些其他 (命中、暴击,闪避等) 组成)
      • 基础属性,一般按英雄定位 (dps,tank, ...) 和稀有度等因素设计
      • 成长类属性,由玩家本身或英雄养成属性,可能会分局内和局外,具体会是等级,阶段,段位等
      • 额外类属性,由装备或其他额外带来的属性
      • 属性公式,战斗时如何计算上述属性,一般来说成长类属性是放大基础属性,额外类就是修正基础属性
    • 技能类型 (按技能类型分伤害类, 治疗类)
      • 伤害类公式 (一般就是攻/防/增伤/减伤等属性)
        • 技能本身的伤害系数,技能伤害类型 (物理,魔法,影响取具体的攻击/防御属性)
        • 攻击方属性
          • 攻击 (由英雄属性计算获得)
          • 伤害加成 (属性类 buff 里面)
        • 受击方属性
          • 防御
          • 伤害减免
        • 其他影响因素
          • 是否暴击, 取暴击值
          • 是否存在伤害浮动 (测试时,为了追求数值准确,最好能关闭该数值,实际上线前也需要检测该数值是否开启)
          • 战斗类型 (PVP/PVE,可能会影响数值计算)
          • 是否存在数值限制 (当双方数值差距过大时, 是否限制最高或最低伤害)
          • 如果攻击小于防御时的处理方式
        • 参考 (乘法公式),技能系数 *(攻击 - 防御)*(1+(伤害加成 - 伤害减免))*(是否暴击?(1+ 暴击 - 抗暴):1)*(伤害浮动)
      • 治疗类公式,类似伤害公式,可能取的属性不一样,还要考虑治疗加成,治疗衰减,治疗增益,治疗限制等因素
    • 对属性
      • 基础属性一般没有问题
      • 需要防止战斗中属性与面板属性不一致(如果存在差异还要考虑告知玩家)
      • 也要防止一些属性未带入战斗,或重复带入战斗
    • 对技能伤害
      • 实际伤害还受到其他因素的影响,也需要考虑
      • 主要看伤害是否合理,与数值设计是否一致
      • 对于技能来说,与其关注数值,更需要关注机制逻辑方面的问题,很多时候数值错误主要来自属性类 buff(攻/防/增伤/减伤等) 多加了或没加上
      • 也可以分析战斗模块的代码,或者 dump 出战斗日志,看看属性变化 (局内成长), 伤害数值是否符合预期
      • 还要考虑, 特殊场景,特殊玩法生效时对英雄属性和战斗数值的影响 (一般也是通过 buff 实现)