zoukankan      html  css  js  c++  java
  • unity3d拓展编辑器Editor的使用

    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);
        }
    }

    看效果:

  • 相关阅读:
    Java初学者:for循环介绍
    Java初学者:条件判断及其语句
    Java初学者:基本数据类型的强制类型转换
    eclipse+gradle+nodejs搭建web开发环境
    桑基图(sankey)
    tomcat性能优化
    数据库概览与选择
    在linux上装 postgresql 在 windows或 linux 连不上的问题的解决方法
    mosquitto的TLS功能测试,客户端使用paho.mqtt.golang(附JAVA版客户端实现)
    两步使用arm-linux-androideabi-addr2line定位JNI动态库中C代码错误位置
  • 原文地址:https://www.cnblogs.com/nsky/p/5266793.html
Copyright © 2011-2022 走看看