Unity编辑器扩展之Gizmos的学习(线框)

Gizmos在Secens的面板上如图
Unity编辑器扩展之Gizmos的学习(线框)_第1张图片

先来段代码 直接看看效果

using UnityEngine;
public class GizmosTest: 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);
}
}

将这个脚本随便 挂在一个GameObject上 (空物体也可以 ,我这里就是灯光和一个UISprite都挂了 选中了UISprite)
效果:
Unity编辑器扩展之Gizmos的学习(线框)_第2张图片

(上面这个是不需要运行的,直接等待编译器编译完 就能在Scene下看到效果)

那这个有什么用呢?而且这个是在MonoBehaviour下的,和编辑器扩展有什么联系?
这里 我想先解释下上面代码的两个方法了
OnDrawGizmos () 这个是在物体被选中,空闲等一些状态调用(姑且用调用这个词吧),至于具体是那些状态,后面过度到编辑器会列出
OnDrawGizmosSelected () 见名知义,选中的时候调用

我想设计这个在monobehaviour是有意义的,至少我知道一个场景,就是射线,利用这个我们可以描绘出射线的,直观的看到,客观存在 这里列下 Gizmos它可以画的东西
Gizmos.DrawSphere(center, radius); 画球(center Vector3类型。radius float)
Gizmos.DrawRay(from, direction); 参数都好理解
Gizmos.DrawLine(from, to);
还有 参见文档吧

接下来 ,那么在编辑器中如何用呢 ,毕竟这个会在关卡编辑器中用到 ,

1,新建一个脚本targetExample,挂在物体上,脚本不需要任何实现
2,在建一个脚本 如下

using UnityEngine;
using UnityEditor;
public class DrawGizmoExample {
// This emulates OnDrawGizmos
[DrawGizmo(GizmoType.NotInSelectionHierarchy |
GizmoType.InSelectionHierarchy |
GizmoType.Selected |
GizmoType.Active |
GizmoType.Pickable)]
private static void MyCustomOnDrawGizmos(
TargetExample targetExample, GizmoType gizmoType) {
Gizmos.color = Color.white;
Gizmos.DrawCube(
targetExample.transform.position, Vector3.one);
}
}

如无错误 编译一下,和你用OnDrawGizmos ()方法实现的是一样的,
我们可以注意到 两个参数 一个是 目标的脚本,这个不解释(不会,555),
第二个参数 是 GizmoType,这里的那个方法前面的5个状态,
1)没选中,父物体也没选中
2)没选中,父物体选中
3)选中
4)激活状态
5)拾取状态

那么 既然 OnDrawGizmos ()方法可以 那么 OnDrawGizmosSelected () 也可以 直接代码了
`[DrawGizmo(GizmoType.InSelectionHierarchy |
GizmoType.Active)]
private static void MyCustomOnDrawGizmosSelected(
TargetExample targetExample, GizmoType gizmoType) {
Gizmos.color = Color.red;
Gizmos.DrawWireCube(
targetExample.transform.position, Vector3.one);
}

注:上面的东西 都是我阅读《Extending Unity with Editor》第二张的一些东西,算是自己的也些收得吧 ,这里记下,可能看到以后的章节还会再写,另外 文章有错误的地方,请告知我,谢谢 ,这是本英文书哦,不过 大多数是平常习惯见到的单词,

你可能感兴趣的:(Unity)