From 3c622a69f2cfd35d67d9ae4f9d40c5c42705772f Mon Sep 17 00:00:00 2001 From: Joywayer Date: Tue, 28 Jul 2026 11:50:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor(enemy):=20NavLinkType=20=E8=BF=81?= =?UTF-8?q?=E5=85=A5=20INavLinkHandler=20=E5=B9=B6=E6=94=B9=E8=BF=B0?= =?UTF-8?q?=E4=B8=BA=E8=83=BD=E5=8A=9B=E9=A9=B1=E5=8A=A8=E7=9A=84=E5=9C=B0?= =?UTF-8?q?=E5=BD=A2=E7=A9=BF=E8=B6=8A;=E8=A1=A5=E4=BA=A4=E6=96=B0?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=20.meta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Enemies/GroundNavigatorLogicTests.cs.meta | 11 ++++ .../Scripts/Enemies/IEnemyNavigator.cs.meta | 11 ++++ .../_Game/Scripts/Enemies/INavLinkHandler.cs | 51 ++++++++++--------- .../Navigation/GroundNavigator.cs.meta | 11 ++++ 4 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 Assets/Tests/EditMode/Enemies/GroundNavigatorLogicTests.cs.meta create mode 100644 Assets/_Game/Scripts/Enemies/IEnemyNavigator.cs.meta create mode 100644 Assets/_Game/Scripts/Enemies/Navigation/GroundNavigator.cs.meta diff --git a/Assets/Tests/EditMode/Enemies/GroundNavigatorLogicTests.cs.meta b/Assets/Tests/EditMode/Enemies/GroundNavigatorLogicTests.cs.meta new file mode 100644 index 00000000..f511e30e --- /dev/null +++ b/Assets/Tests/EditMode/Enemies/GroundNavigatorLogicTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4971f50ef8018c240a9772108815bec6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/IEnemyNavigator.cs.meta b/Assets/_Game/Scripts/Enemies/IEnemyNavigator.cs.meta new file mode 100644 index 00000000..9846d503 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/IEnemyNavigator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2dc26764da6be0142a2e7569d285f8a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/INavLinkHandler.cs b/Assets/_Game/Scripts/Enemies/INavLinkHandler.cs index 9c797145..51f0b2ab 100644 --- a/Assets/_Game/Scripts/Enemies/INavLinkHandler.cs +++ b/Assets/_Game/Scripts/Enemies/INavLinkHandler.cs @@ -4,41 +4,46 @@ using UnityEngine; namespace BaseGames.Enemies { /// - /// 连接段穿越能力接口(架构 07_EnemyModule §5.2)。 + /// 连接段类型:需要"特殊动作"才能通过的一段地形(跳过缺口、下落、爬梯、传送等)。 /// - /// 实现此接口的组件(EnemyAbilityBase 子类 / EnemyMovement 等)可接管特定 - /// NavLink 类型的穿越逻辑,包括动画播放、物理推进、时序控制,完全封装在能力内部。 + /// 项目已移除第三方寻路库,导航不再自动规划跨平台路径;本枚举与 + /// 保留,用于**由能力驱动**的地形穿越 + /// (例如"跳扑到另一个平台"这类招式),由 AI 决策何时使用。 + /// + public enum NavLinkType + { + None, + Segment, // 普通地面/平台段 + Jump, + Fall, + Corner, + Climb, + Elevator, + Teleport, + Custom + } + + /// + /// 连接段穿越能力接口。 /// - /// 注册:EnemyNavAgent.Awake 自动发现当前 GameObject 上实现此接口的所有组件。 + /// 实现此接口的组件(EnemyAbilityBase 子类 / EnemyMovement 等)负责某类 + /// 的穿越逻辑:动画播放、物理推进、时序控制全部封装在实现内部。 /// - /// ──────────────────────────────────────────────────────────────────── - /// 如何扩展自定义 LinkType(超出 PB2d 内置 6 种之外): - /// 1. 在 Edit → Project Settings → PathBerserker2d → NavLink Type Names 追加名字 - /// (索引从 6 开始,例如 index 6 = "wallhug") - /// 2. 在 枚举追加同名条目(ParseLinkType 会字符串匹配) - /// 3. 实现 INavLinkHandler,在 HandledLinkTypes 中声明该枚举值 - /// 4. EnemyNavAgent 会自动将其从 TransformBasedMovement 剥离并委托给能力 - /// - /// 如何使用 NavTag 控制地形通行性: - /// - 在 PathBerserker2dSettings 中为各 NavSurface 配置 NavTag(如"water"、"lava") - /// - 通过 NavAgent.GetNavTagTraversalMultiplier(int) 配置或查询通行成本(≤0 = 禁止) - /// - 无需在此接口扩展,PB2d 在寻路阶段自动过滤 - /// ──────────────────────────────────────────────────────────────────── + /// 移除寻路库后,穿越不再由寻路路径自动触发,而是由 AI/能力显式发起: + /// 导航器报告"够不着"(),AI 据此决定是否使用 + /// 跳扑等能力跨越地形。 /// public interface INavLinkHandler { /// 该处理器负责的所有连接段类型(允许一个组件处理多种类型)。 NavLinkType[] HandledLinkTypes { get; } - /// - /// 运行时可行性检查:能否穿越此具体连接段(距离/高度/当前状态等)。 - /// 返回 false 时 EnemyNavAgent 记录警告并让 TransformBasedMovement 兜底。 - /// + /// 运行时可行性检查:能否穿越此具体连接段(距离/高度/当前状态等)。 bool CanHandleLink(NavLinkType type, Vector2 linkStart, Vector2 linkEnd); /// - /// 开始穿越。能力自行驱动动画 + 物理。 - /// onComplete 必须且只能调用一次;未调用将导致 NavAgent 永远卡在连接段。 + /// 开始穿越。实现自行驱动动画 + 物理。 + /// onComplete 必须且只能调用一次。 /// void BeginLinkTraversal(NavLinkType type, Vector2 linkStart, Vector2 linkEnd, Action onComplete); diff --git a/Assets/_Game/Scripts/Enemies/Navigation/GroundNavigator.cs.meta b/Assets/_Game/Scripts/Enemies/Navigation/GroundNavigator.cs.meta new file mode 100644 index 00000000..1df1ff67 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/Navigation/GroundNavigator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8caa8e247c70b7445820efe80d2da0ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: