编辑器扩展总结
工欲善其事必先利其器
引言: 在项目开发中,编辑器扩展为开发者提供了开发自定义工具的功能,让开发者更加便利地使用编辑器开发项目。近期小生一直在学习编辑器扩展的知识,发现网络上关于编辑器知识点的博客较为零散且混乱。当然,有一些大佬已经总结的很好了,小生这就算是狗尾续貂,主要目的为自我学习,近期会整理一系列编辑器相关的博客,分享给每一位在学习道路上奋斗的童鞋。如若博客中存在错误,还请大佬们不吝赐教。所有参考的博客或者视频来源将在文末展示。
开发版本: Unity 2018.1.3f1
相关博客传送门
一、编辑器开发入门
二、Gizmos辅助调试工具
三、编辑器的相关特性
四、自定义Inspector面板
五、数组或list集合的显示方式
文章目录
编辑器扩展总结
Gizmos辅助调试工具
通过OnDrawGizmo或者OnDrawGizmosSelected方法
通过DrawGIzmos特性
常用Gizmos的方法
拓展:实现场景中一直显示主摄像机的视野范围
参考资料
Gizmos辅助调试工具
Gizmos是Scene场景的可视化调试或辅助工具,可以通过两种方式实现。
通过OnDrawGizmo或者OnDrawGizmosSelected方法
OnDrawGizmos在每一帧都会被调用,其渲染的Gizmos是一直可见的,而OnDrawGizmosSelected是当物体被选中的时候才会显示。
public class GizmosExample : MonoBehaviour
{
//绘制效果一直显示
private void OnDrawGizmos()
{
var color = Gizmos.color;
Gizmos.color = Color.white;
Gizmos.DrawCube(transform.position, Vector3.one);
Gizmos.color = color;
}
//绘制效果在选中对象时显示
private void OnDrawGizmosSelected()
{
var color = Gizmos.color;
Gizmos.color = Color.white;
Gizmos.DrawWireCube(transform.position, Vector3.one);
Gizmos.color = color;
}
}
P.S. Gizmos.color作为全局的静态变量,为了防止这里的color修改会对其他地方的绘制造成影响,所以在绘制完Gizmos的时候,将Gizmos.color修改为原先的值。
OnDrawGizmo或者OnDrawGizmosSelected作为MonoBehaviour的方法,可以直接放在业务逻辑脚本中
通过DrawGIzmos特性
新建一个表示业务逻辑的类TargetExample,将其挂载在场景中的对象身上
using UnityEngine;
using UnityEditor;
public class GizmosTest
{
//表示物体显示并且被选择的时候,绘制Gizmos
[DrawGizmo(GizmoType.Active | GizmoType.Selected)]
//第一个参数需要指定目标类,目标类需要挂载在场景对象中
private static void MyCustomOnDrawGizmos(TargetExample target, GizmoType gizmoType)
{
var color = Gizmos.color;
Gizmos.color = Color.white;
//target为挂载该组件的对象
Gizmos.DrawCube(target.transform.position, Vector3.one);
Gizmos.color = color;
}
}
P.S. 该方法需要将该类放在Editor文件夹内,使用特性的方法可以将业务逻辑和调试脚本分开。由于其针对的是编辑器组件的方法,需要设置为Static方法。
GizmosType 描述
Active 如果激活,则绘制
SelectedOrChild 如果被选择或者选择子物体时,则绘制
NotSelected 如果全没选择,则绘制
Selected 如果选择,则绘制
Pickable 在编辑器中gizmo可以被点选
常用Gizmos的方法
Gizmos.DrawCube() 绘制实体立方体
Gizmos.DrawWireCube() 绘制立方体边框
Gizmos.DrawRay() 绘制射线
Gizmos.DrawLine() 绘制直线
Gizmos.DrawIcon() 绘制Icon,Icon素材需要放在Gizmos文件夹中
Gizmos.DrawFrustum() 绘制摄像机视椎体的视野范围
拓展:实现场景中一直显示主摄像机的视野范围
private Camera mainCamera;
private void OnDrawGizmos()
{
if(mainCamera == null)
mainCamera = Camera.main;
Gizmos.color = Color.green;
//设置gizmos的矩阵
Gizmos.matrix = Matrix4x4.TRS(mainCamera.transform.position, mainCamera.transform.rotation, Vector3.one);
Gizmos.DrawFrustum(Vector3.zero, mainCamera.fieldOfView, mainCamera.farClipPlane, mainCamera.nearClipPlane, mainCamera.aspect);
}
参考资料
Unity中关于可视化辅助类Gizmos的使用
Unity之DrawGizmo
---------------------
作者:橘猫君
来源:CSDN
原文:https://blog.csdn.net/qq_35361471/article/details/84715008
版权声明:本文为博主原创文章,转载请附上博文链接!