NLDClient-yudde/ProjectNLD/AI_Gen_Doc/canAttackNoReloadFull功能说明.md

4.6 KiB
Raw Permalink Blame History

canAttackNoReloadFull 功能说明

本文档由 AI 生成,用于说明武器换弹中断攻击功能的设计与配置。

功能定义

canAttackNoReloadFull 控制角色在换弹过程中,弹药未装满时是否可以中断换弹直接开枪

⚠️ 重要这个功能只对角色Character有效载具和建筑不使用此属性。


使用场景

这个属性用于分段换弹武器(如霰弹枪),这类武器通过 perReloadCount 逐发装填弹药。

典型流程

  1. 角色弹药耗尽,进入换弹状态
  2. 每隔 reloadTime 时间装填 perReloadCount 发子弹
  3. 如果 canAttackNoReloadFull = true:装了部分弹药后,发现敌人可以立即中断换弹开枪
  4. 如果 canAttackNoReloadFull = false:必须等弹药完全装满才能开枪

代码实现位置

只在角色的换弹状态机中使用:

文件Assets/Code/Scripts/GamePlay/Character/State/UpState/UpStateReload.cs

// 第 98-107 行
if (isNotFull)
{
    var canContinueAttack = _CheckCanContinueAttack();
    if (canContinueAttack && owner.fightData.mainWeaponData.canAttackNoReloadFull)
    {
        // 直接开枪
        nextState = EUpState.RaiseWeapon;
    }
    else
    {
        // 继续换弹
        nextState = EUpState.Reload;
    }
}

载具和建筑为什么不需要这个属性

载具换弹逻辑

文件Assets/Code/Scripts/GamePlay/Vehicle/Battery/BatteryStateReload.cs

// 第 53 行
owner.bindWeaponData.SetBulletCount(owner.bindWeaponData.maxBulletCount);
  • 载具炮台一次性装满所有弹药
  • 没有分段换弹机制
  • 不使用 perReloadCount
  • 不检查 canAttackNoReloadFull

建筑武器逻辑类似,也是一次性装满。


配置方式

在武器配置表的 AttributeGroup 中配置 AllowShootAtNoFullReload 属性(枚举值 = 25

  • 值 > 0允许换弹中开枪
  • 值 = 0 或不配置:不允许换弹中开枪

代码读取位置Assets/Code/Scripts/GamePlay/Fight/Weapon/UnitWeaponConfigDataHelper.cs

configData.canAttackNoReloadFull = weaponConfig.AttributeGroup.GetValueOrDefault(AttributeType.AllowShootAtNoFullReload) > 0;

配置错误可能导致的问题

1. 配置为 false 但策划期望可以中断换弹

现象

  • 角色使用霰弹枪类武器时,必须等所有子弹装满才能开枪
  • 换弹过程中即使敌人近身也无法反击

影响:战斗手感僵硬,玩家可能被近身敌人击杀

2. 配置为 true 但策划期望必须装满才能开枪

现象

  • 角色可能只装了1发弹药就开始攻击
  • 对于某些设计为"蓄力攻击"的武器,会破坏预期的战斗节奏

影响战斗平衡被打破DPS 不稳定

3. perReloadCount 配置为 0 或负数

现象

  • 每次换弹补充 0 发子弹,角色永远无法装满弹药
  • 配合 canAttackNoReloadFull = false 会导致角色永久卡在换弹状态

影响:角色完全无法攻击,战斗锁死

4. 武器配置表没有配置 AllowShootAtNoFullReload 属性

现象

  • weaponConfig.AttributeGroup.GetValueOrDefault(AttributeType.AllowShootAtNoFullReload) 返回 0
  • 所有角色武器默认 canAttackNoReloadFull = false
  • 分段换弹武器无法中断换弹

影响:需要策划在武器配置表的 AttributeGroup 中明确配置此属性


配置建议

武器类型 canAttackNoReloadFull perReloadCount 说明
步枪/冲锋枪 false 或不配置 等于 maxBulletCount 一次性装满
霰弹枪 true 1~2 逐发装填,可中断
狙击枪 视设计而定 1 可能需要装满才能开枪
载具炮台 不适用 不适用 一次性装满,不使用此属性
建筑炮台 不适用 不适用 一次性装满,不使用此属性

相关代码文件

文件路径 说明
Assets/Code/Scripts/GamePlay/Fight/Weapon/UnitWeaponConfigData.cs 武器配置数据结构
Assets/Code/Scripts/GamePlay/Fight/Weapon/UnitWeaponData.cs 武器运行时数据
Assets/Code/Scripts/GamePlay/Fight/Weapon/UnitWeaponConfigDataHelper.cs 武器配置构建工具类
Assets/Code/Scripts/GamePlay/Character/State/UpState/UpStateReload.cs 角色换弹状态机
Assets/Code/Scripts/GamePlay/Vehicle/Battery/BatteryStateReload.cs 载具换弹状态机
Assets/Code/Scripts/GenCode/Luban/DataTable/ActorCfg/AttributeType.cs 属性类型枚举定义

文档生成时间2026-02-04 生成工具Cursor AI Agent