zoukankan      html  css  js  c++  java
  • (转)初步认识拓展UnityEditor编辑器定制

    初步认识拓展UnityEditor编辑器定制

    热度 9529 2015-9-4 18:50 |个人分类:Unity3d编辑器拓展

    我相信无数初学者看别人游戏都经常看到他们的Inspector中出现界面和默认不同,但又不知道怎么弄出来的.下面我粗略介绍一下如何自定义这些.
     
    MenuItem属性把任意静态函数变成为一个菜单命令。仅静态函数能使用这个MenuItem属性。
     
    用法:一般在Editor文件夹里创建代码,代码归类
        [MenuItem("MyMenu/Do Something")]
        void DoSomething()
        {
            Debug.Log("Perform operation");
        }
    运行即看到效果

     
    [ContextMenu("XXX")]可以向你的上下文菜单中添加一个菜单项。 如下图

     
    [ExecuteInEditMode]属性的作用是在EditMode下也可以执行脚本。unity中默认情况下,脚本只有在运行的时候才被执行,加上此属性后,不运行程序,也能执行脚本。可以不运行程序下观察程序效果。
     
    AddComponentMenu 添加组件菜单
    原本的脚本(组建)都会在“Component/Script”菜单下,在类之前声明一下这个,它便可以出现在"Componet"菜单下的任何位置
     
    扩展Inspector面板
    通过编译器命令[CustomEditor(typeof(XXX))]即可。
     
    访问被编辑的对象
    在Inspector视图中,我们经常需要访问正在被编辑的对象。Editor类的成员变量target正是提供了这一关联。
    尽管如此,需要注意target是一个Object类型的对象,具体使用时可能需要类型转换(可以使用C#的泛型来避免重复的类型转换)。
    实例:
    1
    2
    3
    4
    5
    6
    7
    8
    usingUnityEngine;
    usingSystem.Collections;
     
    publicclassTest:MonoBehaviour
    {
        publicRect mRectValue;
    publicTexture texture;
    }
     
     
    usingUnityEditor;
    usingUnityEngine;
     
    //自定义Tset脚本
    [CustomEditor(typeof(Test))]
    //在编辑模式下执行脚本,这里用处不大可以删除。
    [ExecuteInEditMode]
    //请继承Editor
    public class MyEditor:Editor
    {
    //在这里方法中就可以绘制面板。
        public override void OnInspectorGUI()
    {
    //得到Test对象
            Test test=(Test)target;
    //绘制一个窗口
    test.mRectValue=EditorGUILayout.RectField("窗口坐标",
    test.mRectValue);
    //绘制一个贴图槽
    test.texture=  EditorGUILayout.ObjectField("增加一个贴图",test.texture,typeof(Texture),true)asTexture;
     
    }
    }

      按钮a是如何出现请看下面内容

    扩展组件背景菜单
    例如添加一个button按钮。
    在MyEditor中的OnInspectorGUI中添加下面代码,在Test中添加函数a();
    if (GUILayout.Button("a")) {
                test.a();
            }
     
    Wizards
    创造主观编辑器窗口
    [MenuItem("GameObject/Create Other/Explosion")]
    public static void CreateExplosion()
    {
    ScriptableWizard.DisplayWizard(“Create explosion”, "Create", "Apply");
    }
    效果图大概这样

  • 相关阅读:
    document.URL 和 windows.location.href的区别
    毕向东udp学习笔记3多线程聊天
    毕向东udp学习笔记2
    毕向东udp学习笔记1
    udp 服务器界面监听
    android jni 总复习(转载)
    Android jni 编程4(对基本类型二维整型数组的操作)
    Android jni 编程3(对基本类型一维整型数组的操作)总结版
    Android jni 编程2(对基本类型一维整型数组的操作)
    Android jni 编程1(对基本类型字符串的操作)
  • 原文地址:https://www.cnblogs.com/backlighting/p/5061557.html
Copyright © 2011-2022 走看看