本文共 2953 字,大约阅读时间需要 9 分钟。
1.OnDrawGizmos和OnDrawGizmosSelcted方法
Gizmos绘制需要Monobehaviour生命周期中的OnDrawGizmos函数,它在生命周期中的位置:
using UnityEngine;public class Test : MonoBehaviour{ private void OnDrawGizmos() { }}
虽然函数代码块中没有任何实现,但是我们已经可以在Gizmos下拉框中看到Test选项:
下面我们来实现一些绘制:
using UnityEngine;public class Test : MonoBehaviour{ private void OnDrawGizmos() { Gizmos.color = Color.white; Gizmos.DrawCube(transform.position, Vector3.one); }}
在自身位置绘制了一个大小为1的立方体,如图所示:
我们增加一个新的方法,OnDrawGizmosSelected. 只有在我们选中该物体时,该方法才起作用。
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文件夹中)
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:
private void OnDrawGizmos(){ //param1 中心点 //param2 大小 Gizmos.DrawCube(transform.position, Vector3.one);}
DrawWireCube:
private void OnDrawGizmos(){ //param1 中心点 //param2 大小 Gizmos.DrawWireCube(transform.position, Vector3.one);}
DrawSphere:
private void OnDrawGizmos(){ //param1 中心点 //param2 半径 Gizmos.DrawSphere(transform.position, 1f);}
DrawWireSphere:
private void OnDrawGizmos(){ //param1 中心点 //param2 半径 Gizmos.DrawWireSphere(transform.position, 1f);}
DrawRay:
private void OnDrawGizmos(){ //param1 起点 //param2 方向 Gizmos.DrawRay(transform.position, transform.up);}
DrawLine:
private void OnDrawGizmos(){ //param1 起点 //param2 终点 Gizmos.DrawLine(transform.position, transform.position + transform.forward);}
DrawIcon:
private void OnDrawGizmos(){ //param1 中心点 //param2 icon路径 需要放置在Asset/Gizmos/路径下 Gizmos.DrawIcon(transform.position, "icon.png");}
DrawFrustrum:
private void OnDrawGizmos(){ //param1 中心点 //param2 fov //param3 maxRange //param4 minRange //param5 aspect Gizmos.DrawFrustum(transform.position, 60f, 3f, 1f, 1.3f);}
欢迎关注公众号 “当代野生程序猿”
转载地址:http://dbwaz.baihongyu.com/