unity3d拓展编辑器Editor的使用
2016-03-11 18:38 糯米粥 阅读(1054) 评论(0) 编辑 收藏 举报Editor可以拓展Inspector窗口
可以通过代码自己绘制监测面板
先来看一个效果:
1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 5 //Editor:使用这个为你的对象来创建自己的自定义检视面板和编辑器。 6 public class myScript : MonoBehaviour 7 { 8 /* 9 [HideInInspector] 10 * [SerializeField] 11 * 意思是:隐藏数据在面板,并且序列化。它可以帮我们永久保存数据, 12 * 如果不加的话数值就会重置。就好比我先添加了一个贴图,一运行游戏刚刚添加的贴图就变成null了。 13 * 14 * 比如一个属性希望被外部访问(必须是public)。但不希望显示在检视面板中 15 * 16 * 那么就: 17 * [HideInInspector] 18 * public int s; 19 * 20 */ 21 22 [HideInInspector] 23 [SerializeField] 24 Rect pRectValue; 25 26 public Rect PRectValue 27 { 28 get { return pRectValue; } 29 set { pRectValue = value; } 30 } 31 32 [HideInInspector] 33 [SerializeField] 34 Texture pTexture; 35 36 public Texture PTexture 37 { 38 get { return pTexture; } 39 set { pTexture = value; } 40 } 41 42 [HideInInspector] 43 [SerializeField] 44 private int a; 45 46 public int A 47 { 48 get { return a; } 49 set { a = value; } 50 } 51 } 52 53 [CustomEditor(typeof(myScript))] 54 class show : Editor 55 { 56 //在这里方法中就可以绘制面板。 57 public override void OnInspectorGUI() 58 { 59 //得到myScript对象 60 myScript test = (myScript)target; 61 //绘制一个窗口 62 test.PRectValue = EditorGUILayout.RectField("窗口坐标", test.PRectValue); 63 //绘制一个贴图槽 64 test.PTexture = EditorGUILayout.ObjectField("增加一个贴图", test.PTexture, typeof(Texture), true) as Texture; 65 66 test.A = EditorGUILayout.IntField("最大值", test.A); 67 } 68 }
这个类并没有放进Editor文件夹中。
其实我们完全可以把需要序列化的类和编辑类分开;
把myScript类修改:
using UnityEngine; using System.Collections; using UnityEditor; //Editor:使用这个为你的对象来创建自己的自定义检视面板和编辑器。 public class myScript : MonoBehaviour { /* [HideInInspector] * [SerializeField] * 意思是:隐藏数据在面板,并且序列化。它可以帮我们永久保存数据, * 如果不加的话数值就会重置。就好比我先添加了一个贴图,一运行游戏刚刚添加的贴图就变成null了。 * * 比如一个属性希望被外部访问(必须是public)。但不希望显示在检视面板中 * * 那么就: * [HideInInspector] * public int s; * */ [HideInInspector] [SerializeField] Rect pRectValue; public Rect PRectValue { get { return pRectValue; } set { pRectValue = value; } } [HideInInspector] [SerializeField] Texture pTexture; public Texture PTexture { get { return pTexture; } set { pTexture = value; } } [HideInInspector] [SerializeField] private int a; public int A { get { return a; } set { a = value; } } }
创建一个类:editors.cs,放进Editor文件夹中。
using UnityEngine; using System.Collections; using UnityEditor; [CustomEditor(typeof(myScript))] public class editors : Editor { //在这里方法中就可以绘制面板。 public override void OnInspectorGUI() { //得到myScript对象 myScript test = (myScript)target; //绘制一个窗口 test.PRectValue = EditorGUILayout.RectField("窗口坐标1", test.PRectValue); //绘制一个贴图槽 test.PTexture = EditorGUILayout.ObjectField("增加一个贴图1", test.PTexture, typeof(Texture), true) as Texture; test.A = EditorGUILayout.IntField("最大值1", test.A); } }
看效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?