当前位置: 首页 > news >正文

【unity游戏开发——编辑器扩展】Gizmos可视化辅助工具

注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。

文章目录

  • 前言
    • 1、Gizmos 基础概念
    • 2、Gizmos相关的生命周期函数
      • 2.1 OnDrawGizmos()
      • 2.2 OnDrawGizmosSelected()
    • 3、基本设置
      • 设置绘制颜色(支持透明度)
  • 一、基本图形绘制
    • 1、绘制立方体
      • 1.1 绘制实体立方体
        • (1) 介绍
        • (2) 示例
      • 1.2 绘制线框立方体
        • (1) 主要API
        • (2) 示例
    • 2、Gizmos绘制球体
      • 2.1 绘制实体球体
        • (1) 主要API
        • (2) 示例
      • 2.2 绘制线框球体
        • (1) 主要API
        • (2) 示例
    • 3、绘制任意网格
      • 3.1 绘制任意实体网格
        • (1) 主要API
        • (2) 示例
      • 3.2 绘制任意线框网格
        • (1) 主要API
        • (2) 示例
    • 4、绘制视锥体
        • (1) 主要API
        • (2) 示例
  • 二、绘制内容跟随对象旋转
    • 1、主要API
    • 2、示例
  • 三、绘制线段射线
    • 1、绘制线段
      • 1.1 主要API
      • 1.2 示例
    • 2、绘制射线
      • 2.1 主要API
      • 2.2 示例
  • 四、绘制贴图、图标
    • 1、Gizmos绘制贴图
      • 1.1 主要API
      • 1.2 示例
    • 2、Gizmos绘制图标
      • 2.1 主要API
      • 2.2 示例
  • 专栏推荐
  • 完结

前言

1、Gizmos 基础概念

Gizmos和Handles一样,是用来让我们拓展Scene窗口的。相对于Handles,Gizmos主要用于在 Scene 视图中绘制辅助图形(如线框、图标等),而Handles主要用于编辑器工具开发,创建可交互的控制手柄(如移动、旋转手柄)。

2、Gizmos相关的生命周期函数

在继承MonoBehaviour的脚本中实现以下生命周期函数,便可以在其中使用Gizmos来进行图形图像的绘制:

2.1 OnDrawGizmos()

在每帧调用,绘制的内容随时可以在Scene窗口中看见。

private void OnDrawGizmos()
{Debug.Log("OnDrawGizmos");
}

2.2 OnDrawGizmosSelected()

仅当脚本依附的GameObject被选中时才会每帧调用绘制相关内容。

private void OnDrawGizmosSelected()
{Debug.Log("OnDrawGizmosSelected");
}

3、基本设置

设置绘制颜色(支持透明度)

Gizmos.color = Color.red;Gizmos.color = new Color(1, 0, 0, 0.5f);

一般它不会单独拿来使用,都会配合其他api绘制出不同颜色的辅助线

一、基本图形绘制

1、绘制立方体

1.1 绘制实体立方体

(1) 介绍
//实体立方体
Gizmos.DrawCube(中心点, 大小);
(2) 示例
using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.color = Color.red;Gizmos.DrawCube(transform.position, Vector3.one);}
}

效果
在这里插入图片描述

1.2 绘制线框立方体

(1) 主要API
//线框立方体
Gizmos.DrawWireCube(中心点, 大小);
(2) 示例
using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.color = Color.red;Gizmos.DrawWireCube(transform.position, new Vector3(2, 1, 3));}
}

效果
在这里插入图片描述

2、Gizmos绘制球体

2.1 绘制实体球体

(1) 主要API
Gizmos.DrawSphere(中心点, 半径);
(2) 示例
using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.color = Color.red;Gizmos.DrawSphere(transform.position, 2);}
}

效果
在这里插入图片描述

2.2 绘制线框球体

(1) 主要API
Gizmos.DrawWireSphere(中心点, 半径);
(2) 示例
using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.color = Color.red;Gizmos.DrawWireSphere(this.transform.position, 3);}
}

效果
在这里插入图片描述

3、绘制任意网格

3.1 绘制任意实体网格

(1) 主要API
Gizmos.DrawMesh(mesh, 位置, 角度);
(2) 示例
using UnityEngine;public class TestGizmosMono : MonoBehaviour
{public Mesh mesh;private void OnDrawGizmosSelected(){Gizmos.color = Color.red;if (mesh != null) Gizmos.DrawMesh(mesh, transform.position, transform.rotation);}
}

效果
在这里插入图片描述

3.2 绘制任意线框网格

(1) 主要API
Gizmos.DrawWireMesh(mesh, 位置, 角度);
(2) 示例
using UnityEngine;public class TestGizmosMono : MonoBehaviour
{public Mesh mesh;private void OnDrawGizmosSelected(){Gizmos.color = Color.red;if (mesh != null) Gizmos.DrawWireMesh(mesh, this.transform.position, this.transform.rotation);}
}

效果
在这里插入图片描述

4、绘制视锥体

(1) 主要API
Gizmos.DrawFrustum(绘制中心, FOV(Field of View,视野)角度, 远裁切平面, 近裁切平面, 屏幕长宽比);
(2) 示例
using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.color = Color.red;Gizmos.DrawFrustum(transform.position, 30, 50, 0.5f, 1.7f);}
}

效果
在这里插入图片描述

二、绘制内容跟随对象旋转

注意:因为Gizmos绘制图形是不能跟随对象旋转的,所以我们要自行处理

1、主要API

  • 修改Gizmos绘制前的矩阵

    Gizmos.matrix = Matrix4x4.TRS(位置, 角度, 缩放);
    
  • 还原矩阵

    Gizmos.matrix = Matrix4x4.identity
    

2、示例

using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){// 将绘制矩阵该为某个对象的,这样就可以跟着移动、旋转、缩放了Gizmos.matrix = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);// Gizmos绘制视锥Gizmos.color = Color.red;Gizmos.DrawFrustum(transform.position, 30, 50, 0.5f, 1.7f);// 将绘制矩阵还原,以下绘制的对象不会跟随旋转Gizmos.matrix = Matrix4x4.identity;// Gizmos绘制线框立方体Gizmos.color = Color.blue;Gizmos.DrawWireCube(transform.position, new Vector3(2, 1, 3));}
}

效果
在这里插入图片描述

三、绘制线段射线

1、绘制线段

1.1 主要API

Gizmos.DrawLine(起点, 终点);

1.2 示例

using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.color = Color.red;Gizmos.DrawLine(transform.position, transform.position + Vector3.one);}
}

效果
在这里插入图片描述

2、绘制射线

2.1 主要API

Gizmos.DrawRay(起点, 方向);

2.2 示例

using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.color = Color.red;Gizmos.DrawRay(transform.position, transform.forward);}
}

效果
在这里插入图片描述

四、绘制贴图、图标

1、Gizmos绘制贴图

1.1 主要API

图片默认是反过来的

Gizmos.DrawGUITexture(new Rect(x, y, w, h), 图片信息);

1.2 示例

using UnityEngine;public class TestGizmosMono : MonoBehaviour
{public Texture texture;private void OnDrawGizmosSelected(){if (texture != null){// 注意只能在xy跟随对象移动,在z轴移动不起作用Gizmos.DrawGUITexture(new Rect(transform.position.x, transform.position.y, 160, 90), texture);}}
}

效果
在这里插入图片描述

2、Gizmos绘制图标

2.1 主要API

图标需要放置在固定文件夹中 Assets/Gizmos/
在这里插入图片描述

Gizmos.DrawIcon(Vector3.up, “图标名”);

2.2 示例

using UnityEngine;public class TestGizmosMono : MonoBehaviour
{private void OnDrawGizmosSelected(){Gizmos.DrawIcon(transform.position, "MyIcon");}
}

效果
在这里插入图片描述


专栏推荐

地址
【unity游戏开发入门到精通——C#篇】
【unity游戏开发入门到精通——unity通用篇】
【unity游戏开发入门到精通——unity3D篇】
【unity游戏开发入门到精通——unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发——模型篇】
【unity游戏开发——InputSystem】
【unity游戏开发——Animator动画】
【unity游戏开发——UGUI】
【unity游戏开发——联网篇】
【unity游戏开发——优化篇】
【unity游戏开发——shader篇】
【unity游戏开发——编辑器扩展】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

相关文章:

  • Linux中SHELL脚本常用命令
  • 充电枪IEC62196/EN 62196测试内容
  • 【STM32开发板】电源设计原理
  • 电机控制学习笔记
  • ASR/TTS model 通过量化提升推理速度
  • 【Redis】第2节|Redis基本数据类型
  • 29. 自动化测试开发框架拓展之接口测试
  • 堆栈计算机 零地址指令
  • Voice Conversion语音转换
  • Python5.26打卡(day27)
  • 解决虚拟机挂起后,docker容器无法访问的问题
  • 电子电路:什么是感应电动势?
  • Java 版本升级指南:从 Java 8 到 Java 11/17/21 的核心优势与新特性
  • 学习心得(17--18)Flask表单
  • SCADA|KingSCADA信创4.0-Win10安装过程
  • geo ai库本地运行测试的坑
  • IndexTTS - B 站推出的文本转语音模型,支持拼音纠正汉字发音(附整合包)
  • 尚硅谷redis7 37-39 redis持久化之AOF简介
  • 开发一个交易所大概需要多少成本
  • RPM之(1)基础使用
  • 中电云主机怎样登入创建的网站/新媒体seo培训
  • 邢台网站制作报价多少钱/公司推广发帖网站怎么做
  • 门户网站建设意义/谷歌全球营销
  • 南京网站建设推广/友情链接买卖平台
  • 网站设计厂/今日新闻最新头条10条摘抄
  • qq企业邮箱怎么申请/如何优化推广中的关键词