可视化工具

可视化工具用于在 Scene 视图中以 Gizmos 的方式绘制调试图形,包括射线、扇形、盒体、球体等。
该模块在开发阶段主要用于调试范围检测、朝向判断、技能判定区、碰撞区域、AI 视野等场景。

在框架中,可视化调试由 MathUtil 等运行时工具自动调用,无需手动挂载脚本。
所有可视化功能只在 DebugMode 开启时生效,打包后会自动失效(零运行成本)。


1. 功能概述

可视化工具提供以下能力:

  • 扇形(视野、攻击扇形、圆锥判定)
  • 射线(Raycast 可视化)
  • 盒体(OverlapBox 可视化)
  • 球体(OverlapSphere 可视化)
  • 支持 XY / XZ / YZ 平面绘制(不同游戏维度)
  • 可单独开启/关闭某一类绘制
  • 每帧自动收集绘制请求,绘制后自动清空
  • 完全 Editor Only,运行时零损耗

调用方式简单,只需在任意逻辑中调用可视化 API,即可在 Scene 视图中实时显示。


2. 使用方式:GizmosAdapter(运行时桥接层)

由于 Runtime 程序集不能引用 UnityEditor,无法直接绘制 Gizmos。
因此框架提供 GizmosAdapter

GizmosAdapter.DrawRayAction?.Invoke(...);
GizmosAdapter.DrawSectorAction?.Invoke(...);
GizmosAdapter.DrawBoxAction?.Invoke(...);
GizmosAdapter.DrawSphereAction?.Invoke(...);

特点:

  • Runtime 可以安全调用(不会产生 Editor 引用)
  • Editor 环境下由 EditorBridge 自动绑定真正的绘制逻辑
  • 非 Editor(游戏运行时)这些委托为 null → 自动跳过 → 不绘制
  • 运行时代码必须使用 GizmosAdapter,而不是 GizmosDrawer。

3. 全局开关

可通过以下字段控制整个可视化系统的开关:

GizmosDrawer.EnableDrawer = true;

若 EnvironmentState.DebugMode == false:

  • 所有可视化自动关闭
  • 无任何性能开销

4. 绘制方法示例

以下示例需使用 GizmosAdapter:

4.1 绘制射线 Ray

GizmosAdapter.DrawRayAction?.Invoke(
    transform.position,
    transform.forward,
    5f,
    hit: true
);

4.2 绘制扇形 / 圆锥范围

GizmosAdapter.DrawSectorAction?.Invoke(
    transform.position,
    transform.forward,
    5f,
    60f,
    MathUtil.PlaneType.XZ,
    result: true
);

4.3 绘制盒子(OverlapBox)

GizmosAdapter.DrawBoxAction?.Invoke(
    transform.position,
    transform.rotation,
    new Vector3(1, 1, 1),
    hit: false
);

4.4 绘制球体(OverlapSphere)

GizmosAdapter.DrawSphereAction?.Invoke(
    transform.position,
    3f,
    hit: true
);

5. 开启/关闭特定绘制类型

你可以只开启某一类调试图形,例如只显示扇形:

GizmosDrawer.SetFeature(GizmosDrawer.GizmoFeature.Sector, true);
GizmosDrawer.SetFeature(GizmosDrawer.GizmoFeature.Ray, false);

重置全部开启:

GizmosDrawer.ResetFeatures(true);

6. 可视化平滑度(Segments)

扇形和球体采用默认细分段数 segments = 20,以保证:

  • 视觉圆滑
  • 性能开销极低

可在 EditorBridge 中修改默认值以实现更高精度。


7. 编辑器桥接层(EditorBridge)

可视化绘制的真实执行者为 GizmosDrawer(Editor 程序集)。

Runtime 调用 Adapter → EditorBridge 自动绑定 → Editor 模式中真正绘制图形:

GizmosAdapter.DrawRayAction = GizmosDrawer.DrawRay;
GizmosAdapter.DrawSectorAction = (...)=>
{
    GizmosDrawer.DrawSector(..., segments: 20);
};

打包时 UNITY_EDITOR 会被剔除,因此可视化功能完全不会进入游戏包体。

8. 工作机制简述

Runtime 工具调用 GizmosAdapter →  
(Editor 环境)EditorBridge 自动绑定委托 →  
GizmosDrawer 收到绘制请求 →  
MonoManager 调用 OnDrawGizmos →  
Scene 视图渲染调试图形 →  
绘制后自动清空队列

特点:

  • 不需要 MonoBehaviour 挂载
  • 不污染场景
  • 完全自动化
  • DebugMode 控制启用/禁用

9. 使用场景示例

  • AI 视野检测

  • 技能扇形范围可视化

  • 攻击距离调试

  • 射线检测位置调试

  • 敌人侦测范围展示

  • 圆形爆炸范围可视化

  • OverlapBox 调试角色周围区域

  • 所有绘制同时适用于 2D/3D(XY/XZ/YZ)。


10. 总结

可视化工具提供:

  • Runtime → Editor 的安全可视化桥接(GizmosAdapter)

  • 完整射线/扇形/盒体/球体绘制能力

  • DebugMode 自动启用,不影响正式版本

  • 自动化收集与绘制机制(零维护)

  • 配合 MathUtil 可实现非常强大的 AI / 战斗调试功能

  • 无需任何额外设置,只需在 Debug 模式下调用对应方法即可。