norepo 1. 前言 Gizmos能且只能在MonoBehaviour相关子类中,使用特定的函数调用,其中: OnDrawGizmos() 在每帧调佣。所有在OnDrawGizmos中的渲染都是可见的。 OnDrawGizmosSelected() 仅在脚本附加的物体被选择时调用。 2 参数总览 静态函数描述 CalculateLOD确定场景视图中具有指定半径的指定位置处的小控件的适当细节级别。 DrawCube在中心绘制一个带有尺寸的实心框。 DrawFrustum使用当前设置的 Gizmos.matrix 绘制相机平截头体的位置和旋转。 DrawGUITexture在该场景中绘制一个纹理。 DrawIcon在 Scene 视图中的某个位置绘制一个图标。 DrawLine绘制一条从 from 开始到 to 的线。 DrawLineList在点对之间绘制多条线。 DrawLineStrip在提供的跨度中的每个点之间绘制一条线。 DrawMesh绘制一个网格。 DrawRay绘制一条从 from 开始到 from + direction 的射线。 DrawSphere使用 center 和 radius 绘制一个实心球体。 DrawWireCube使用 center 和 size 绘制一个线框盒体。 DrawWireMesh绘制一个线框网格。 DrawWireSphere使用 center 和 radius 绘制一个线框球体。 3 Gizmos绘制 3.1 立方体:DrawCube 在中心绘制一个带有尺寸的实心框。 using UnityEngine; public class GizmosScript : MonoBehaviour { private void OnDrawGizmos() { Gizmos.DrawCube(Vector3.zero, Vector3.one); //参数释义: 1.Cube中心点 2.Cube大小 } } 3.2 视锥:DrawFrustum 使用当前设置的 Gizmos.matrix 绘制相机平截头体的位置和旋转。 using UnityEngine; public class GizmosScript : MonoBehaviour { private void OnDrawGizmos() { Gizmos.DrawFrustum(Vector3.zero, 60, 300, 0.3f, 1.7f); //参数释义:1. 绘制中心 2. FOV角度 3. 远裁切平面 4. 近裁切平面 5. aspect 屏幕长宽比 } } 3.3 贴图:DrawGUITexture 在该场景中绘制一个纹理。 所选纹理是在 XY 平面(即,Z 坐标为零的平面)定义的“屏幕”上的 3D 空间中 绘制的。纹理矩形的值是以场景单位 给出的。可选边框值以场景单位指定从该矩形内的每条边缘嵌入; 在嵌入的矩形内绘制该纹理,并且向外重复边缘像素。当围绕主纹理的大型 背景区域的边缘为单色时,这是创建此区域的一种非常有用的快速方式。 在结合直接指向该纹理的摄像机创建 GUI 背景时, 此函数会非常有用。 using UnityEngine; public class GizmosScript : MonoBehaviour { public Texture myTexture; void OnDrawGizmosSelected() { Gizmos.DrawGUITexture(new Rect(0, 0, 10, 10), myTexture); //1.指定Rect 2.指定贴图 } } 3.4 图标:DrawIcon 在 Scene 视图中的某个位置绘制一个图标。 使用 name 参数指定该图标的图像文件名, 而 center 参数表示该图标在世界空间中的位置, allowScaling 参数确定是否允许缩放该图标。 应将该图像文件置于 Assets/Gizmos 文件夹中。 using UnityEngine; public class GizmosScript : MonoBehaviour { public Texture myTexture; void OnDrawGizmosSelected() { Gizmos.DrawIcon(transform.position, "Light Gizmo.tiff", true); } } 3.5 线段:DrawLine 绘制一条从 from 开始到 to 的线。 using UnityEngine; public class GizmosScript : MonoBehaviour { void OnDrawGizmosSelected() { Gizmos.DrawLine(Vector3.zero, Vector3.one); //1.from(线段起点) 2.to(线段终点) } } 3.6 网格:DrawMesh 绘制一个网格。 using UnityEngine; public class GizmosScript : MonoBehaviour { public Mesh mesh; void OnDrawGizmosSelected() { if (mesh != null) { Gizmos.DrawMesh(mesh, 0); //1. mesh 2.submeshIndex } } } 3.7 射线:DrawRay 绘制一条从 from 开始到 from + direction 的射线。 using UnityEngine; public class GizmosScript : MonoBehaviour { void OnDrawGizmosSelected() { // 在对象前面绘制一条 2 单位长的红线 Gizmos.color = Color.red; Vector3 direction = transform.TransformDirection(Vector3.forward) * 2; Gizmos.DrawRay(transform.position, direction); } } 3.8 球体:DrawSphere 使用 center 和 radius 绘制一个实心球体。 using UnityEngine; public class GizmosScript : MonoBehaviour { void OnDrawGizmosSelected() { // 在变换位置绘制一个黄色球体 Gizmos.color = Color.yellow; Gizmos.DrawSphere(transform.position, 1); } } 3.9 Cube网格线:DrawWireCube 使用 center 和 size 绘制一个线框盒体。 using UnityEngine; public class GizmosScript : MonoBehaviour { void OnDrawGizmosSelected() { // 在变换位置画一个黄色立方体 Gizmos.color = Color.yellow; Gizmos.DrawWireCube(transform.position, new Vector3(1, 1, 1)); } } 3.10 Mesh网格线:DrawWireMesh 使绘制一个线框网格。 using UnityEngine; public class GizmosScript : MonoBehaviour { public Mesh mesh; void OnDrawGizmosSelected() { // 在变换位置画一个黄色立方体 Gizmos.color = Color.yellow; Gizmos.DrawWireMesh(mesh, Vector3.zero, Quaternion.identity, new Vector3(1, 1, 1)); } } 3.11 Sphere网格线:DrawWireSphere 使用 center 和 radius 绘制一个线框球体。 using UnityEngine; public class GizmosScript : MonoBehaviour { void OnDrawGizmosSelected() { // 在变换位置画一个黄色立方体 Gizmos.color = Color.yellow; Gizmos.DrawWireSphere(transform.position,1); } }