1.OnDrawGizmos和OnDrawGizmosSelcted方法
Gizmos绘制需要Monobehaviour生命周期中的OnDrawGizmos函数,它在生命周期中的位置:
代码语言:javascript复制using UnityEngine;
public class Test : MonoBehaviour
{
private void OnDrawGizmos() { }
}
虽然函数代码块中没有任何实现,但是我们已经可以在Gizmos下拉框中看到Test选项:
下面我们来实现一些绘制:
代码语言:javascript复制using UnityEngine;
public class Test : MonoBehaviour
{
private void OnDrawGizmos()
{
Gizmos.color = Color.white;
Gizmos.DrawCube(transform.position, Vector3.one);
}
}
在自身位置绘制了一个大小为1的立方体,如图所示:
我们增加一个新的方法,OnDrawGizmosSelected. 只有在我们选中该物体时,该方法才起作用。
代码语言:javascript复制using UnityEngine;
public class Test : MonoBehaviour
{
private void OnDrawGizmos()
{
Gizmos.color = Color.white;
Gizmos.DrawCube(transform.position, Vector3.one);
}
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireCube(transform.position, Vector3.one);
}
}
2.DrawGizmo特性
除了在Monobehaviour中实现外,还可以使用DrawGizmot特性:(脚本需要放在Editor文件夹中)
代码语言:javascript复制using UnityEngine;
using UnityEditor;
public class TestEditor : Editor
{
[DrawGizmo(GizmoType.NotInSelectionHierarchy
| GizmoType.InSelectionHierarchy
| GizmoType.Selected
| GizmoType.Active
| GizmoType.Pickable)]
private static void TestGizmosDraw(Test test, GizmoType gizmoType)
{
Gizmos.color = Color.white;
Gizmos.DrawCube(test.transform.position, Vector3.one);
}
[DrawGizmo(GizmoType.NotInSelectionHierarchy
| GizmoType.InSelectionHierarchy
| GizmoType.Selected
| GizmoType.Active
| GizmoType.Pickable)]
private static void TestGizmosDrawSelected(Test test, GizmoType gizmoType)
{
Gizmos.color = Color.red;
Gizmos.DrawWireCube(test.transform.position, Vector3.one);
}
}
NotInSelectionHierarchy:即没有被选中也没有父物体被选中
InSelectHierarchy:被选中或者有子物体被选中
Selected:被选中
Active:物体没有隐藏
Pickable:作者还不知道啥作用
3.Gizmos类
DrawCube:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 中心点
//param2 大小
Gizmos.DrawCube(transform.position, Vector3.one);
}
DrawWireCube:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 中心点
//param2 大小
Gizmos.DrawWireCube(transform.position, Vector3.one);
}
DrawSphere:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 中心点
//param2 半径
Gizmos.DrawSphere(transform.position, 1f);
}
DrawWireSphere:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 中心点
//param2 半径
Gizmos.DrawWireSphere(transform.position, 1f);
}
DrawRay:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 起点
//param2 方向
Gizmos.DrawRay(transform.position, transform.up);
}
DrawLine:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 起点
//param2 终点
Gizmos.DrawLine(transform.position, transform.position transform.forward);
}
DrawIcon:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 中心点
//param2 icon路径 需要放置在Asset/Gizmos/路径下
Gizmos.DrawIcon(transform.position, "icon.png");
}
DrawFrustrum:
代码语言:javascript复制private void OnDrawGizmos()
{
//param1 中心点
//param2 fov
//param3 maxRange
//param4 minRange
//param5 aspect
Gizmos.DrawFrustum(transform.position, 60f, 3f, 1f, 1.3f);
}