编辑器

【编辑器扩展】实现自定义脚本Inspector面板显示

家住魔仙堡 提交于 2019-12-03 14:59:57
有些时候我们会需要一些奇怪的需求,来让我自定义自己的Inspector面板,下面我们来做一个基本的自定义面板的测试demo 首先新建一个 InspectorTest.cs 脚本,我们在里面定义几个测试属性 public float float_Test; public int int_Test; public bool bool_Test; public Color color_Test; 我们将InspectorTest脚本挂载到一个GameObject上,我们查看一下当前unity默认的Inspector面板上的属性序列化出来的样子: 接下来就是我们自定义自己的面板序列化样式了: 先新建一个 InspectorTestEditor.cs 脚本,将这个脚本放置在Editor文件夹下。 打开脚本,导入 UnityEditor 的命名空间: using UnityEditor; 让InspectorTestEditor类继承Editor类: public class InspectorTestEditor : Editor{} 在定义类的头上加上一个标签: [CustomEditor(typeof(InspectorTest))] public class InspectorTestEditor : Editor{} 重写一下 OnInspectorGUI 方法: public

Unity Editor扩展编辑器Inspector界面

筅森魡賤 提交于 2019-12-03 14:57:41
[SerializeFild]//对私有变量进行序列化保存设置的值,使其可以在Inspector界面显示 首先扩展编辑器需要: using UnityEditor (1)Inspector界面编辑: //被扩展脚本 using UnityEngine; using System.Collections; public class Test : MonoBehaviour { [SerializeFild]//对私有变量进行序列化保存设置的值,使其可以在Inspector界面显示 [HideInInspector]//在Inspector界面隐藏 Private Sprite spt; Public Sprite Spt{ get{return spt;} set{spt = value;} } } //Editor脚本,可以放在Editor文件夹中(如果不放在Editor请加属性[ExecuteInEditMode]) Using UnityEditor; using UnityEngine; using UnityEngine.UI; //[ExecuteInEditMode] //在编辑器中运行 //[CanEditMultipleObjects]//可以对多个脚本进行设置,可以做多选操作 [CustomEditor(typeof(Test))]//标明是哪一个脚本类

Unity编辑器——Inspector 面板扩展

ぃ、小莉子 提交于 2019-12-03 14:27:56
目录 将EditorGUI 扩展在 Inspector 面板上 EditorWindows 窗口 EditorWindows 下拉菜单 预览窗口 获取预览信息 本人代下CSDN资源,付费下载。不同积分的资源,付费的金额不同: 10积分之内的,每个书籍资源1.5元。 10→20积分之内的,每个资源2元。 20→30积分之内的,每个资源2.5元。 30→40积分之内的,每个资源3元。 40积分以上的,每个资源3.5元。 下载的资源可以是你发过来的CSDN下载的链接,也可以发资源的详情信息,然后我给你找,都可以。 像一般的CSDN的资源都是 10 或者 20 积分之内的,如果你不是经常下CSDN,特意去买一个会员,实在是太亏了(一个最低都要98元一个月,然后一个月之内只能下载30个资源)。有意者可以加扣扣: 2572722931(微信同样) 。我来帮你下载。童叟无欺,举报的人都生儿子没P眼的人。啪啪啪的时候猝死。 将EditorGUI 扩展在 Inspector 面板上 ● EditorGUI 和 GUI 的用法几乎完全一致,目前来说前者多用于 编辑器开发 ,后者多用于发布后 调试编辑器。 总之,它们都是起辅助作用的。 EditorGUI 提供的组件非常丰富,常用的绘制元素包括 文本、按钮、图片和滚动框等 。做一个好的编辑器,是离不开 EditorGUI 的。如图:我们将

UNITY3D拓展编辑器 - InspectorEditor(属性编辑器)1

╄→гoц情女王★ 提交于 2019-12-03 14:27:12
前文: 本章节会对InspectorEditor(属性编辑器)的创建方式进行叙述. 正文: 1.代码最终效果 2. 架构阐述 一个InspectorEditor(属性编辑器)产生直接对应着一个继承MonoBehaviour的脚本文件,脚本文件中定义着不同的属性以供InspectorEditor(属性编辑器)去实现。我们可以通过EditorGUILayout/GUILayout来实现InspectorEditor(属性编辑器)界面。 3. EditorGUILayout脚本分析 EditorGUILayout 是绘制InspectorEditor(属性编辑器)的脚本类,脚本内部方法大致分为两类,一类是:手动布局,另外一类是:组件绘制。 4. 开始实现切入正题 4.1 大家都知道拓展器的脚本都需要放置在Editor文件下进行预编译,所以我们也为自己的项目创建一个Editor目录。额外在创建一个Script目录存储脚本文件。 4.2 在Script文件下创建继承自MonoBehaviour的脚本类,维护自定义编辑器属性.有人会问这个类到底用来干什么的,以当下的理解来讲,用于存储编辑器数据用的.下面将我创建的代码贴到下面以供大家参考。 using UnityEngine; using System.Collections; public enum VirtualRoomColor {

Unity Editor 编辑器扩展二 Inspector面板特殊属性

ε祈祈猫儿з 提交于 2019-12-03 14:27:00
目录 目录 Inspector面板特殊属性 代码 Test2_1cs 代码 Test2_2cs 代码 Test2_3cs 代码 Test2_4_2cs 代码 Test2_4_4cs Inspector面板特殊属性 这个知识点网上介绍很多,在此只是学习,其实也很简单,贴出代码,一看便懂。 代码 Test2_1.cs using UnityEngine; using System.Collections; public class Test2_1 : MonoBehaviour { // 限定取值范围 [Range( 1 , 10 )] public int num1; [Range( 1 , 10 )] public float num2; [Range( 1 , 10 )] public long num3; [Range( 1 , 10 )] public double num4; // 空出多行 [Multiline( 5 )] public string multiline; [TextArea( 3 , 5 )] public string textArea; } 代码 Test2_2.cs using UnityEngine; public class Test2_2 : MonoBehaviour { // 对本组件右键设置功能按钮 [ContextMenu(

Unity3D编辑器扩展(二)之对Inspetor面板的扩展

淺唱寂寞╮ 提交于 2019-12-03 14:24:25
Unity3D对编辑器的扩展提高了开发的效率,今天就和大家讨论一下对Inspector面板的扩展,这也是我们最经常使用的工具。那就以一个例子来开始学习吧! 在项目的开发过程中经常会用到修改某个脚本的大量数据,我们可以用一个按钮一键来实现这么多的数据修改,不用每个参数都进行修改啦,是不是很方便呢,那么今天的东西就可以派上用场啦! 用到的例子是修改Camera上的nearClipPlane、farClipPlane和fieldOfView参数。 下图是在Inspector面板上Camera没有进行扩展的布局。 **注意事项: (1)、引用UnityEditor; (2)、添加扩展脚本的类型,如[CustomEditor(typeof(Camera))] (3)、脚本继承Editor ; (4)、将脚本放到Editor文件下,如果没有那就创建一个Editor文件夹;** 附上代码片段 using UnityEngine; using System.Collections; using UnityEditor; //需要扩展的脚本 [CustomEditor( typeof (Camera))] public class SetLightParameters : Editor { private Camera camera; //重写OnInspectorGUI()方法 public

Unity编辑器扩展-基本界面编写

情到浓时终转凉″ 提交于 2019-12-03 14:22:03
一.在编辑器上增加一个MenuItem 先进行第一步,给编辑器加个菜单,通过[MenuItem("AXX/BXX")]就可以在编辑器的上边菜单栏增加一个下拉菜单AXX,并增加一个按钮BXX。只要把这句话写在我们定义的函数上方就可以,然后我们点击这个按钮,就会调用这个我们自定义的函数。不过有一点一定要记住,这个函数要是static的!(想一想就可以知道是为什么,编辑器没有必要搞粗一个对象之类的,因为我们要调用的只是这个方法)例如: using UnityEngine; using UnityEditor; using System.Collections; public class EditorTest { [MenuItem("MyTools/EditorTest")] public static void ConfigDialog() { Debug.Log("EditorTest ToolButton is pressed!"); } } 我们的编辑器就多了这样的一个工具选项MyTools,点击出现了EditorTest下拉菜单,再点击按钮就会输出Log了,如下图所示: 二.创建一个对话框 如果我们嫌这个一个下拉菜单不爽,那我们就可以创建一个对话框,然后就可以在对话框里放更多的按钮或者一些工具条来调节相关内容,下面看一下在Unity编辑器中对话框的创建以及使用。 using

Unity编辑器开发(二):四大GUI系统

前提是你 提交于 2019-12-03 14:21:44
前言 首先,对于编辑器中的GUI系统,我们可以分为四大类: 1、UnityEngine.GUI 2、UnityEngine.GUILayout 3、UnityEditor.EditorGUI 4、UnityEditor.EditorGUILayout GUI系统 这是运用最广泛的GUI系统,所属命名空间UnityEngine,用其绘制的所有控件不带有自动布局效果,需要手动指定每个控件的绘制位置和大小, 自适应性较弱 ,但 开发自由度较高 。 注意:GUI系统可以在发布后使用,也可以在编辑器中使用。 GUI系统的控件使用例子 private void OnGUI ( ) { GUI . Button ( new Rect ( 0 , 0 , 100 , 30 ) , "Button" ) ; GUI . Label ( new Rect ( 100 , 0 , 100 , 30 ) , "Label" ) ; GUI . PasswordField ( new Rect ( 0 , 30 , 100 , 30 ) , "Password" , '$' ) ; GUI . Toggle ( new Rect ( 100 , 30 , 100 , 30 ) , true , "Toggle" ) ; } GUILayout系统 带自动布局的GUI系统,所属命名空间UnityEngine

自定义Inspector 面板编辑器

爷,独闯天下 提交于 2019-12-03 14:06:20
Chinar blog : www.chinar.xin 自定义Inspector 面板编辑器 本文提供全流程,中文翻译。 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Chinar ―― 心分享、心创新! 助力快速了解编辑器扩展如何使我们高效的工作 为初学者节省宝贵的时间,避免采坑! ---------- 文章目录 1 Intro —— 介绍 2 Custom Inspector Editor ―― 自定义检视面板编辑器 3 EditorGUILayout ―― 编辑器界面自动布局 3.1 EditorGUILayout.LabelField ―― 制作一个标签字段(通常用于显示只读信息) 3.2 EditorGUILayout.SelectableLabel ―― 可选择标签(通常用于显示只读信息,可以被复制粘贴) 3.3 EditorGUILayout.TextField ―― 文本字段 (可以有默认值,有返回值,并且可以在Inspector面板赋值) 3.4 EditorGUILayout.PasswordField ―― 密码字段(通常用于显示只读信息,可以被复制粘贴) 3.5 EditorGUILayout.IntField / FloatField ―― 整数字段 3.6 EditorGUILayout.Slider /

[Unity3D]编辑器扩展之数组或List显示

独自空忆成欢 提交于 2019-12-03 14:05:32
  之前一直使用循环的方式创建,现在找到了一种更简便的方法,效果和Inspector面板上是一模一样的。省事了ヾ(Ő∀Ő๑)ノ太好惹! 效果如下: 源码如下: using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace XM.Editor { public class AssetBundleCreator : EditorWindow { [MenuItem( "Tools/Build Asset Bundle" )] public static void BuildAssetBundle () { var win = GetWindow<AssetBundleCreator>( "Build Asset Bundle" ); win.Show(); } [SerializeField] //必须要加 protected List<UnityEngine.Object> _assetLst = new List<UnityEngine.Object>(); //序列化对象 protected SerializedObject _serializedObject; //序列化属性 protected SerializedProperty _assetLstProperty;