Unity Gizmos

简介

Gizmos 是Unity编辑器中的一种可视化调试工具,用于在场景视图(Scene View)中绘制辅助图形、图标或文本,帮助开发者直观理解游戏对象的位置、范围、逻辑关系等信息

核心功能

1. 辅助可视化调试

  • 在场景视图中显示碰撞体、触发器、射线等逻辑的形状和范围
  • 绘制自定义的路径、区域或标记关键点(如出生点、目标点)

2. 编辑器内预览

  • 在非运行模式下直接查看逻辑效果(如动画轨迹、物理模拟区域)
  • 通过图标(如小箭头、立方体)标记特定对象的位置和方向

3. 自定义图形绘制

  • 使用代码动态绘制线、球体、立方体等几何图形
  • 支持不同颜色和持续时间、区分不同调试信息

Gizmos 的常用方法与场景

1. 方法

|---------------------------|-------------------------|
| 方法 | 作用 |
| Gizmos.DrawWireSphere | 绘制线框球体 |
| Gizmos.DrawLine | 绘制直线 |
| Gizmos.DrawCube | 绘制实心立方体 |
| Gizmos.DrawIcon | 在场景中显示图标(如Unity内置的箭头图标) |
| Gizmos.color | 设置绘制颜色 |
| Gizmos.DrawFrustum | 绘制视椎体(常用于摄像机或灯光范围) |
| Gizmos.DrawMesh | 网格绘制 |

2. 脚本中的回调函数

  • OnDrawGizmos()
    • **调用时机:**每帧调用,绘制持续显示的Gizmos(如碰撞体范围)
    • **适用场景:**需要常驻显示的调试信息
  • OnDrawGizmosSelected()
    • **调用时机:**仅在对象被选中时调用,绘制选中状态的Gizmos
    • **适用场景:**仅在选中时显示详细信息(如触发器的精确边界)

使用示例代码

1. 自定义触发区域

cs 复制代码
public class TriggerZone : MonoBehaviour {
    public Color gizmoColor = Color.red;
    public Vector3 size = Vector3.one;

    // 常驻显示的Gizmos
    void OnDrawGizmos() {
        Gizmos.color = gizmoColor;
        Gizmos.DrawWireCube(transform.position, size);
    }

    // 选中时显示的Gizmos
    void OnDrawGizmosSelected() {
        Gizmos.color = Color.yellow;
        Gizmos.DrawCube(transform.position, size);
    }
}

2. AI路径可视化

cs 复制代码
public class AiPath : MonoBehaviour 
{
    public List<Vector3> pathPoints = new();

    void OnDrawGizmos() 
    {
        Gizmos.color = Color.blue;
        foreach (Vector3 point in pathPoints) 
        {
            Gizmos.DrawSphere(point, 0.2f);
        }
        Gizmos.DrawLineList(pathPoints.ToArray());
    }
}

注意事项

1. 仅在编辑器可见

  • Gizmos不会在发布后的游戏(Build)中显示,不影响运行时性能

2. 控制显示与隐藏

  • 通过场景视图工具栏的 Gizmos菜单 切换全局显示(可过滤特定类型的Gizmos)

3. Gizmos.DrawLine与Debug.DrawLine的区别

  • **Debug.DrawLine:**在Game视图 中绘制调试线(仅运行时),适合测试移动轨迹
  • **Gizmos:**在Scene视图 中绘制(支持非运行模式),适合静态逻辑调试
相关推荐
小贺儿开发9 分钟前
Unity3D 智慧城市管理平台
数据库·人工智能·unity·智慧城市·数据可视化
June bug15 小时前
【领域知识】休闲游戏一次发版全流程:Google Play + Apple App Store
unity
星夜泊客17 小时前
C# 基础:为什么类可以在静态方法中创建自己的实例?
开发语言·经验分享·笔记·unity·c#·游戏引擎
dzj202118 小时前
PointerEnter、PointerExit、PointerDown、PointerUp——鼠标点击物体,则开始旋转,鼠标离开或者松开物体,则停止旋转
unity·pointerdown·pointerup
心前阳光19 小时前
Unity 模拟父子关系
android·unity·游戏引擎
在路上看风景1 天前
26. Mipmap
unity
咸鱼永不翻身1 天前
Unity视频资源压缩详解
unity·游戏引擎·音视频
在路上看风景1 天前
4.2 OverDraw
unity
在路上看风景1 天前
1.10 CDN缓存
unity
ellis19701 天前
Unity插件SafeArea Helper适配异形屏详解
unity