Files
zeling_v2/Assets/_Game/Scripts/Enemies/INavLinkHandler.cs
Joywayer a1b4e629aa feat: Implement Room Streaming System
- Add RoomStreamingManager to manage room loading and unloading based on player proximity.
- Create StreamingBudgetConfigSO for memory and performance budgeting of the streaming system.
- Introduce TransitionDirector to handle seamless and atmospheric fade transitions between rooms.
- Develop WorldGraph to represent room connectivity and facilitate neighbor queries and distance calculations.
- Implement RoomNode and RoomEdge classes to structure room data and connections.
2026-05-23 19:10:29 +08:00

52 lines
2.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using UnityEngine;
namespace BaseGames.Enemies
{
/// <summary>
/// 连接段穿越能力接口(架构 07_EnemyModule §5.2)。
///
/// 实现此接口的组件EnemyAbilityBase 子类 / EnemyMovement 等)可接管特定
/// NavLink 类型的穿越逻辑,包括动画播放、物理推进、时序控制,完全封装在能力内部。
///
/// 注册EnemyNavAgent.Awake 自动发现当前 GameObject 上实现此接口的所有组件。
///
/// ────────────────────────────────────────────────────────────────────
/// 如何扩展自定义 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 在寻路阶段自动过滤
/// ────────────────────────────────────────────────────────────────────
/// </summary>
public interface INavLinkHandler
{
/// <summary>该处理器负责的所有连接段类型(允许一个组件处理多种类型)。</summary>
NavLinkType[] HandledLinkTypes { get; }
/// <summary>
/// 运行时可行性检查:能否穿越此具体连接段(距离/高度/当前状态等)。
/// 返回 false 时 EnemyNavAgent 记录警告并让 TransformBasedMovement 兜底。
/// </summary>
bool CanHandleLink(NavLinkType type, Vector2 linkStart, Vector2 linkEnd);
/// <summary>
/// 开始穿越。能力自行驱动动画 + 物理。
/// <b>onComplete 必须且只能调用一次</b>;未调用将导致 NavAgent 永远卡在连接段。
/// </summary>
void BeginLinkTraversal(NavLinkType type, Vector2 linkStart, Vector2 linkEnd, Action onComplete);
/// <summary>
/// 强制中断穿越(敌人死亡 / 被击飞 / 场景切换时调用)。
/// 调用后不得再调用 onComplete。
/// </summary>
void AbortLinkTraversal();
}
}