自定义Inspector检视面板

Unity中的Inspector面板可以显示的属性包括以下两类:(1)C#以及Unity提供的基础类型;(2)自定义类型,并使用[System.Serializable]关键字序列化,比如:
[System.Serializable]
public class TestClass
{
    public Vector3 vec = Vector3.zero;
    public Color clr = Color.green;
}

  也可以使用[System.NonSerialized]标记不需要显示的属性,比如:

public class TestClass
{
    [System.NonSerialized]
    public Vector3 vec = Vector3.zero;
}

  有的时候对于U3D默认的Inspector不能满足需求,则可以对特定类型的Inspector面板进行自定义:编写一个对应的Editor类,然后重写其OnInspector方法,比如我们有如下类型:

using UnityEngine;
using System.Collections;

[System.Serializable]
public class TestClass
{
    public Vector3 vec = Vector3.zero;
    [System.NonSerialized]
    public Color clr = Color.green;
}

[ExecuteInEditMode()]
[RequireComponent(typeof(TestComponent))]
public class TestInspector : MonoBehaviour
{
    public Vector3 lookAtPoint = Vector3.zero;
    public Vector3 pos = Vector3.zero;
    public TestClass testObj = new TestClass();

    void Update()
    {
        transform.LookAt(lookAtPoint);
        transform.position = pos;
    }
}

  然后在Editor目录下添加如下脚本:

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor(typeof(TestInspector))]
public class TestInspectorEditor : Editor
{
    private SerializedObject obj;
    private SerializedProperty lookAtPoint;
    private SerializedProperty pos;
    private SerializedProperty testObj;

    // 添加TestInspector组件的GameObject被选中时触发该函数
    void OnEnable()
    {
        obj = new SerializedObject(target);
        lookAtPoint = obj.FindProperty("lookAtPoint");
        pos = obj.FindProperty("pos");
        testObj = obj.FindProperty("testObj");
    }

    // 重写Inspector检视面板
    public override void OnInspectorGUI()
    {
        obj.Update();

        EditorGUILayout.PropertyField(lookAtPoint);
        EditorGUILayout.PropertyField(pos);
        EditorGUILayout.PropertyField(testObj, true);   // 第二个参数表示有子节点需要显示

        obj.ApplyModifiedProperties();
    }

}

  在OnInspector函数中就可以实现你想要的效果。

  上面的代码中有几点需要注意:

  (1)[ExecuteInEditMode()]这个函数可以使代码在编辑模式下运行,不需要运行游戏;

  (2)TestInspectorEditor类必须继承自Editor,CustomEditor告诉U3D哪个组建类型需要自定义,OnInspectorGUI在显示组件的Inspector面板时调用;

  (3)SerializedObject序列化物体、SerializedProperty序列化属性和Editor这三者一起使用,用来访问和更新组件的属性,SeriailzedProperty能够以通用的方式访问所有的基础类型,包括数组的控制等。

  另外,可以在OnInspectorGUI中调用DrawDefaultInspector函数用来显示默认的监事面板内容。

  这篇帖子写得很不错:http://blog.csdn.net/lilanfei/article/details/7680802

自定义Inspector检视面板,布布扣,bubuko.com

时间: 2024-10-13 15:23:01

自定义Inspector检视面板的相关文章

Unity Editor自定义检视面板

学习了下自定义检视面板的使用,效果图如下: 先是定义一个脚本文件,我们来修饰它的检视面板: [HelpURL("http://www.baidu.com")] public class Atr : MonoBehaviour { public int id; public string Name; [Multiline(5)] public string BackStory; public float health; public float damage; public float

unity3d编辑器——检视面板部分(一)

最近在学习unity编辑器,so,记录总结一下. 以下介绍了一些简单的unity3d检视面板部分的使用技巧. 1 using UnityEngine; 2 using System.Collections; 3 4 //让你在将这个脚本拖到一个GameObject上的时候,自动添加Camera,Light,Cloth组件 5 [RequireComponent(typeof(Camera), typeof(Light), typeof(Cloth))] 6 public class MyClas

Android自定义系统分享面板

在Android中实现分享有一种比较方便的方式,调用系统的分享面板来分享我们的应用.最基本的实现如下: public Intent getShareIntent(){ Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, "这是测试分享面板, http://www.baidu.comss"); intent.setType("

Unity中自定义 Inspector 面板

假如有以下代码: 1 using UnityEngine; 2 using UnityEditor; 3 4 public class LugsTest : MonoBehaviour 5 { 6 [SerializeField] 7 bool isEnabled; 8 9 [SerializeField] 10 string name; 11 } 将这个脚本直接挂到 GameObject 上的效果是: 这个是显而易见的答案.如果现在有一个需求,只在 Inspector 中显示代码中的部分变量,

U3D自定义Inspector项未触发保存事件的解决方案

1.问题描述与解决方案 1.1.说明 应该只有起步做U3D编辑器插件的部分同行需要了解本文. 该问题源于在做UI插件的时候,发现Inspector面板上手动修改值后,没有触发U3D编辑器本身的修改事件,导致这次操作无法保存且无法撤销. 修改事件被触发的具体表现为文件名最右边有星号'*',现在大多数文本编辑器中内容改变也基本如此表现. 1.2.解决方案 这里我列出两种解决方案: (下面都以待修改的对象为PlayerControl类型的obj变量) public class PlayerContro

【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 本篇文章中,我们学习了Unity Shader的基本写法框架,以及学习了Shader中Properties(属性)的详细写法,光照.材质与颜色的具体写法.写了6个Shader作为本文S

Unity3D用户手册

Welcome to Unity. 欢迎使用Unity. Unity is made to empower users to create the best interactive entertainment or multimedia experience that they can. This manual is designed to help you learn how to use Unity, from basic to advanced techniques. It can be

Windows系统Unity3D中的快捷键

[狗刨学习网] Windows系统Unity3D中的快捷键[td] 组合键 键 功能 File 文件 Ctrl   N New Scene 新建场景 Ctrl   O Open Scene 打开场景 Ctrl   S Save Scene 保存 Ctrl Shift S Save Scene as 保存场景为 Ctrl Shift B Build Settings... 编译设置... Ctrl   B Build and run 编译并运行 Edit 编辑 Ctrl   Z Undo 撤消 C

游戏开发热门技术浅析

最近手游开发很热,今天我们来看看目前比较主流的手机游戏开发技术,以下仅仅是个人了解的皮毛,为想了解和步入游戏行业的朋友做一参考. cocos2d 我们先来看一幅图: 要看懂这幅图就先要了解一下cocos2d的生命历程,下面我来做一下简要的归纳和介绍吧. 2005年,Ricardo和朋友萌生了用Python语言 "一星期编写一个游戏"的想法.在2005-2007年间,他们设计了许多种这样的游戏.值得注意的是,每次在设计一个新的游戏时,其游戏引擎都是重新开发的. 2008年2月,他们在阿根