扩展Unity Inspector

Unity Editor下,可以在不改变原有布局的情况下扩展Inspect的界面。

在继承了Editor的类中,有两种实现方式:

using UnityEditor;

[CustomEditor(typeof(CustomClass))]
public class CustomClassEditor : Editor {

    public override void OnInspectorGUI() {

        // 自定义代码

        base.OnInspectorGUI();

        // 自定义代码

    }

}

using UnityEditor;

[CustomEditor(typeof(CustomClass))]
public class CustomClassEditor : Editor {

    public override void OnInspectorGUI() {

        // 自定义代码

        DrawDefaultInspector();

        // 自定义代码

    }

}

当然,这两种方式对开发者自定义的组件的显示是没有问题的,因为自定义的组件本身的绘制方式就是利用的Editor类中的OnInspectorGUI方法。

Unity内置的一些组件,比如说AudioSource这个组件,有的开发者发现扩展了它以后,显示在Inspector中的样式跟默认的有很大区别。

代码:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(AudioSource))]
public class CustomAudioSourceEditor : Editor {

    public override void OnInspectorGUI() {

        DrawDefaultInspector();

        CreateEditor(targets, EditorGUILayout.HelpBox("我最牛逼!", MessageType.Info);

    }

}

原始图片:

修改后图片:

造成这一问题的原因是Unity默认的大部分组件Unity官方代码也通过继承Editor的方式对其样式进行了自定义,因此我们需要得到AudioSource的Editor派生类,调用他的OnInspectorGUI方法。在这里我们通过反射进行调用CreateEditor(targets, typeof(Editor).Assembly.GetType("UnityEditor.AudioSourceInspector")).OnInspectorGUI();来解决样式不一致的问题。

完整代码:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(AudioSource))]
public class CustomAudioSourceEditor : Editor {

    public override void OnInspectorGUI() {

        CreateEditor(targets, typeof(Editor).Assembly.GetType("UnityEditor.AudioSourceInspector")).OnInspectorGUI();

        EditorGUILayout.HelpBox("我最牛逼!", MessageType.Info);

    }

}

如图所示:

更多地Unity技术问题我们可以在“Paws3D学习中心”进行讨论交流。

原文地址:https://www.cnblogs.com/itnantongbao/p/10192019.html

时间: 2024-10-24 13:30:49

扩展Unity Inspector的相关文章

扩展 Unity 内置类型 (组件)

Unity 内置组件基本没有可以继承的.某些比较常用但现有 API 没有定义的功能,我们可以通过C# 的扩展类方法来实现.下面是一些比较实用的扩展方法. 扩展 Transform 每一个 GameObject 都含有一个 Transform 组件(在 UGUI 里新引入的 RectTransform 继承 Transform),GameObject 的层级也是由 Transform 负责的.以下扩展方法使用了 C# 的委托,关于委托可以参考这里:C# 中的 delegate 和 event. /

unity, inspector debug

以前经常因为脚本中private变量不在inspector界面中显示,不方便观察其值的变化,所以本该用private的用了public. 今天发现,原来inspector有个选项,如图,平常勾选的是Normal,则inspector界面只显示public变量,如果改为勾选Debug,则private变量也会以灰字显示出来.

unity, inspector listview

inspector中实现列表框: public override void OnInspectorGUI(){ bool isDoubleClick=false;        Event e = Event.current;        if (e.type == EventType.mouseDown && Event.current.button == 0) {//left button down            if(e.clickCount==2){//double cl

Unity Inspector 给组件自动关联引用(二)

通过声明的变量名称,主动关联引用. 使用这个关联引用两种方式1.  给你组件继承  MonoAutoQuote 点击组件inspector 按钮执行2.  给你组件类添加[AAutoQuote] 特性  通过Plateface/SetSelectGameRef 执行 [AAutoQuote] public class MonoAutoQuote : MonoBehaviour ,IAutoQuote{} public interface IAutoQuote { } public class A

unity inspector 自动装载Commont和Prefab属性

在使用unity的过程中,经常遇到这样的问题:每次都需要手动为序列化属性.像这样: 试着找了找,真的找到了一份代码,但是缺少自动装载Prefab的功能.之后我花了点时间添加这个功能. 使用方法: 1 [Autohook] 2 public Button SendBtn; 3 [Autohook] 4 public Button StartBtn; 5 [Autohook] 6 public Button LeaveBtn; 7 [Autohook] 8 public Text RoomDateT

Unity Editor Extensions – Menu Items

转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/space-uid-18602.html Unity 编辑器允许添加自定义菜单的外观和行为类似内置菜单.这可以用于添加经常常用的功能,可直接从编辑器UI操作. 在这篇文章中,我将展示如何利用新的菜单menu items,Unity 编辑器中创建并尝试提供真实世界的例子用法,对于每个描述的topic. 添加菜单项 为了向top-lev

Unity的Attribute(特性)还算多吧

转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/space-uid-18602.html ?? 属性 (Attribute) 使用 Unity 的C#语言 ,利用属性(Attribute)来类定义和变量定义或区分其他的变量,您可以设置一种特殊行为.* 1 例如,您添加[SerializeField]属性变量,私有变量标识序列化. [SerializeField] int  计数;

从Unity引擎过度到Unreal4引擎

 前言 寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎╮(╯▽╰)╭,今天早上一觉醒来,突然得知,UE4免费了,这绝对是个好消息,前不久我还在纠结怎么申请校园账号呢o(╯□╰)o.迫不及待打开电脑下载了UE引擎的一个类似管理的客户端,在里面最醒目的一栏,看到一个令人哭笑不得的导航,如下图: EPIC这是要逆天的节奏吗?不过不管他了,接下来,我们便一同学习一下EPIC提供给我们的这篇从Unity过渡到UE4的经验之谈吧.说明一下,下面我将对这篇文章中的重点内容做翻译和一些自己的见解

Unity在Android和iOS中如何调用Native API

本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调用.利用这一特性,可以扩展unity的功能.例如集成和调用第三方库.同时为了满足对unity接口的一致性,可以考虑在android和iOS上提供相同的接口供C#调用. 这里列举以下两个例子. 1. 1. 以弹出一个覆盖部分屏幕的webview为例来说明如何从C#调用Native接口. 2. 2. 简