>> >> >> Reference << << << <<<<<<Ref>>>>>>
>> >> >> Indexer << << << <<<<<<Idx>>>>>>
Matched: 0

Tags

    Categories

      Types

        Top Results

          Gizmos
          M: 2025-06-01 - ljf12825

          Gizmos是一种用于在Scene视图中可视化调试信息的工具,常用于开发阶段来辅助设计和调试,但不会在游戏运行时显示在Game视图中

          Gizmos的作用

          Gizmos主要用于以下目的:

          • 可视化对象的范围(如碰撞体、攻击范围、视野等)
          • 表示路径、方向、目标点等
          • 调试数据结构(如八叉树、导航网格等)
          • 可视化音效区或光源影响范围

          使用方式

          可以在脚本中通过OnDrawGizmos()OnDrawGizmosSelected()函数来自定义Gizmo的绘制

          1.OnDrawGizmos()

          无论是否选中物体,都会绘制

          void OnDrawGizmos()
          {
              Gizmos.color = Color.yellow;
              Gizmos.DrawWireSphere(transform.position, 1f)l
          }
          

          2.OnDrawGizmosSelected()

          只有在选中该GameObject时才会绘制

          void OnDrawGizmosSelected()
          {
              Gizmos.color = Color.red;
              Gizmos.DrawWireCube(transform.position, Vector3.one * 2);
          }
          

          Tips

          • Gizmos只在Scene视图中起作用,不会影响实际游戏运行逻辑
          • 可以使用Handles绘制更高级的Gizmos
          • 复杂场景可封装Gizmo可视化模块,提升调试效率

          Gizmos API

          Static Properties

          属性名类型说明
          colorColor设置下一个 Gizmo 图形的颜色
          matrixMatrix4x4设置变换矩阵,影响后续绘制的 Gizmo 的位置/旋转/缩放
          exposureTexture设置用于 Light Probe 曝光可视化的纹理(高级光照调试使用)
          probeSizefloat设置 Light Probe Gizmo 的显示大小

          Static Method

          方法描述
          CalculateLOD(Vector3 position, float radius)计算某个位置与半径下的合适 LOD(Level of Detail),用于 Scene 视图中的 Gizmo 可视化。常用于优化大场景调试可视化。
          DrawCube(Vector3 center, Vector3 size)画一个实心立方体,常用于表示物体边界或区域。
          DrawFrustum(Vector3 center, float fov, float maxRange, float minRange, float aspect)画一个视锥体(如摄像机视野),支持通过 Gizmos.matrix 设置变换位置和方向。
          DrawGUITexture(Rect position, Texture texture)在 Scene 中绘制一个 GUI 纹理。已过时,推荐使用 Editor GUI 工具替代。
          DrawIcon(Vector3 center, string name, bool allowScaling = true)在场景中某位置绘制一个图标,图标必须是 Unity 的内置图标名。
          DrawLine(Vector3 from, Vector3 to)画一条线段,基础调试最常用。
          DrawLineList(NativeArray<Vector3> points)每两个点组成一段线,适用于批量线段绘制(如网格边、路径等)。
          DrawLineStrip(NativeArray<Vector3> points)将多个点首尾相连,绘制连续的折线段(如折线图、轨迹线等)。
          DrawMesh(Mesh mesh, Vector3 position, Quaternion rotation, Vector3 scale)在指定位置绘制一个完整 Mesh(实心),可以用来调试自定义模型、碰撞体。
          DrawRay(Vector3 from, Vector3 direction)画一条射线(从起点沿方向延伸),用于调试方向、视野、攻击方向等。
          DrawSphere(Vector3 center, float radius)绘制一个实心球体。
          DrawWireCube(Vector3 center, Vector3 size)绘制一个线框立方体,调试边界、区域划分常用。
          DrawWireMesh(Mesh mesh, Vector3 position, Quaternion rotation, Vector3 scale)绘制一个 mesh 的线框形式(仅显示轮廓)。适合调试模型形状、LOD 结构等。
          DrawWireSphere(Vector3 center, float radius)绘制一个线框球体,最常用于范围可视化(攻击/感知/触发等)。

          示例

          可视化角色视野

          void OnDrawGizmosSelected()
          {
              Gizmos.color = Color.green;
              Gizmos.DrawRay(transform.position, transform.forward * 5f);
          
              float fov = 45f;
              Quaternion leftRay = Quaternion.Euler(0, -fov, 0);
              Quaternion rightRay = Quaternion.Euler(0, fov, 0);
          
              Gizmos.DrawRay(transform.position, leftRay * transform.forward * 5f);
              Gizmos.DrawRay(transform.position, rightRay * transform.forward * 5f);
          }
          

          绘制摄像机视锥

          void OnDrawGizmos()
          {
              Gizmos.color = Color.green;
              Gizmos.matrix = transform.localToWorldMatrix;
              Gizmos.DrawFrustum(Vector3.zero, 60f, 10f, 0.3f, 1.77f); // 画出视野锥体
              Gizmos.matrix = Matrix4x4.identity; // 清除变换
          }