【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,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!