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);
}
}
3.2 视锥:DrawFrustum
- 使用当前设置的 Gizmos.matrix 绘制相机平截头体的位置和旋转。
using UnityEngine;
public class GizmosScript : MonoBehaviour
{
private void OnDrawGizmos()
{
Gizmos.DrawFrustum(Vector3.zero, 60, 300, 0.3f, 1.7f);
}
}
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);
}
}
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
using UnityEngine;
public class GizmosScript : MonoBehaviour
{
void OnDrawGizmosSelected()
{
Gizmos.DrawLine(Vector3.zero, Vector3.one);
}
}
3.6 网格:DrawMesh
using UnityEngine;
public class GizmosScript : MonoBehaviour
{
public Mesh mesh;
void OnDrawGizmosSelected()
{
if (mesh != null)
{
Gizmos.DrawMesh(mesh, 0);
}
}
}
3.7 射线:DrawRay
- 绘制一条从 from 开始到 from + direction 的射线。
using UnityEngine;
public class GizmosScript : MonoBehaviour
{
void OnDrawGizmosSelected()
{
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);
}
}