refactor(enemy): NavLinkType 迁入 INavLinkHandler 并改述为能力驱动的地形穿越;补交新脚本 .meta
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2dc26764da6be0142a2e7569d285f8a8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -4,41 +4,46 @@ using UnityEngine;
|
||||
namespace BaseGames.Enemies
|
||||
{
|
||||
/// <summary>
|
||||
/// 连接段穿越能力接口(架构 07_EnemyModule §5.2)。
|
||||
/// 连接段类型:需要"特殊动作"才能通过的一段地形(跳过缺口、下落、爬梯、传送等)。
|
||||
///
|
||||
/// 实现此接口的组件(EnemyAbilityBase 子类 / EnemyMovement 等)可接管特定
|
||||
/// NavLink 类型的穿越逻辑,包括动画播放、物理推进、时序控制,完全封装在能力内部。
|
||||
/// <para>项目已移除第三方寻路库,导航不再自动规划跨平台路径;本枚举与
|
||||
/// <see cref="INavLinkHandler"/> 保留,用于**由能力驱动**的地形穿越
|
||||
/// (例如"跳扑到另一个平台"这类招式),由 AI 决策何时使用。</para>
|
||||
/// </summary>
|
||||
public enum NavLinkType
|
||||
{
|
||||
None,
|
||||
Segment, // 普通地面/平台段
|
||||
Jump,
|
||||
Fall,
|
||||
Corner,
|
||||
Climb,
|
||||
Elevator,
|
||||
Teleport,
|
||||
Custom
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 连接段穿越能力接口。
|
||||
///
|
||||
/// 注册:EnemyNavAgent.Awake 自动发现当前 GameObject 上实现此接口的所有组件。
|
||||
/// 实现此接口的组件(<c>EnemyAbilityBase</c> 子类 / <c>EnemyMovement</c> 等)负责某类
|
||||
/// <see cref="NavLinkType"/> 的穿越逻辑:动画播放、物理推进、时序控制全部封装在实现内部。
|
||||
///
|
||||
/// ────────────────────────────────────────────────────────────────────
|
||||
/// 如何扩展自定义 LinkType(超出 PB2d 内置 6 种之外):
|
||||
/// 1. 在 Edit → Project Settings → PathBerserker2d → NavLink Type Names 追加名字
|
||||
/// (索引从 6 开始,例如 index 6 = "wallhug")
|
||||
/// 2. 在 <see cref="NavLinkType"/> 枚举追加同名条目(ParseLinkType 会字符串匹配)
|
||||
/// 3. 实现 INavLinkHandler,在 HandledLinkTypes 中声明该枚举值
|
||||
/// 4. EnemyNavAgent 会自动将其从 TransformBasedMovement 剥离并委托给能力
|
||||
///
|
||||
/// 如何使用 NavTag 控制地形通行性:
|
||||
/// - 在 PathBerserker2dSettings 中为各 NavSurface 配置 NavTag(如"water"、"lava")
|
||||
/// - 通过 NavAgent.GetNavTagTraversalMultiplier(int) 配置或查询通行成本(≤0 = 禁止)
|
||||
/// - 无需在此接口扩展,PB2d 在寻路阶段自动过滤
|
||||
/// ────────────────────────────────────────────────────────────────────
|
||||
/// <para>移除寻路库后,穿越不再由寻路路径自动触发,而是由 AI/能力显式发起:
|
||||
/// 导航器报告"够不着"(<see cref="IEnemyNavigator.IsBlocked"/>),AI 据此决定是否使用
|
||||
/// 跳扑等能力跨越地形。</para>
|
||||
/// </summary>
|
||||
public interface INavLinkHandler
|
||||
{
|
||||
/// <summary>该处理器负责的所有连接段类型(允许一个组件处理多种类型)。</summary>
|
||||
NavLinkType[] HandledLinkTypes { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 运行时可行性检查:能否穿越此具体连接段(距离/高度/当前状态等)。
|
||||
/// 返回 false 时 EnemyNavAgent 记录警告并让 TransformBasedMovement 兜底。
|
||||
/// </summary>
|
||||
/// <summary>运行时可行性检查:能否穿越此具体连接段(距离/高度/当前状态等)。</summary>
|
||||
bool CanHandleLink(NavLinkType type, Vector2 linkStart, Vector2 linkEnd);
|
||||
|
||||
/// <summary>
|
||||
/// 开始穿越。能力自行驱动动画 + 物理。
|
||||
/// <b>onComplete 必须且只能调用一次</b>;未调用将导致 NavAgent 永远卡在连接段。
|
||||
/// 开始穿越。实现自行驱动动画 + 物理。
|
||||
/// <b>onComplete 必须且只能调用一次</b>。
|
||||
/// </summary>
|
||||
void BeginLinkTraversal(NavLinkType type, Vector2 linkStart, Vector2 linkEnd, Action onComplete);
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8caa8e247c70b7445820efe80d2da0ec
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user