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 weaponDamagel, weaponDamage2;
    public string shoeName;
    public int shoeSize;
    public string shoeType;

    [Space(100)]
    [Range(-2,5)]
    public int time;
    void Start ()
    {
        health = 50;
    }
}

然后在根目录的Editor文件夹下定义一个用来修饰上面脚本检视面板的类文件:

using UnityEngine;
using System.Collections;
using UnityEditor;

[CustomEditor(typeof(Atr))]
//需要继承自editor,并且引入UnityEditor程序集
public class LearnInspector : Editor
{
    private Atr atr;
    private bool showWeapons;

    void OnEnable()
    {
        //获取当前自定义的Inspector对象
        atr = (Atr) target;
    }

    //执行该函数来自定义检视面板
    public override void OnInspectorGUI()
    {
        //不写默认是垂直布局
        EditorGUILayout.BeginVertical();

        //空格
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Base Info");
        atr.id = EditorGUILayout.IntField("Atr ID", atr.id);
        atr.Name = EditorGUILayout.TextField("Atr Name", atr.Name);

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Back Story");
        atr.BackStory = EditorGUILayout.TextArea(atr.BackStory, GUILayout.MinHeight(100));

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        atr.health = EditorGUILayout.Slider("Health", atr.health, 0, 100);

        if (atr.health < 20)
        {
            GUI.color = Color.red;
        }
        else if (atr.health>80)
        {
            GUI.color = Color.green;
        }
        else
        {
            GUI.color = Color.grey;
        }

        Rect progressRect = GUILayoutUtility.GetRect(50, 50);

        EditorGUI.ProgressBar(progressRect,atr.health/100.0f,"Health");

        GUI.color = Color.white;

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        atr.damage = EditorGUILayout.Slider("Damage", atr.damage, 0, 20);

        if(atr.damage<10)
        {
            EditorGUILayout.HelpBox("伤害过低",MessageType.Error);
        }
        else if (atr.damage > 15)
        {
            EditorGUILayout.HelpBox("伤害过高",MessageType.Warning);
        }
        else
        {
            EditorGUILayout.HelpBox("伤害适中",MessageType.Info);
        }

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Shoe");
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Name", GUILayout.MaxWidth(50));
        atr.shoeName = EditorGUILayout.TextField(atr.shoeName);
        EditorGUILayout.LabelField("Size", GUILayout.MaxWidth(50));
        atr.shoeSize = EditorGUILayout.IntField(atr.shoeSize); EditorGUILayout.LabelField("Type", GUILayout.MaxWidth(50));
        atr.shoeType = EditorGUILayout.TextField(atr.shoeType);

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.EndVertical();
    }
}

//绘制字段用到的方法

//EditorGUILayout.LabelField()标签字段
//EditorGUILayout.IntField() 整数字段
//EditorGUILayout.FloatField() 浮点数字段
//EditorGUILayout.TextField() 文本字段
//EditorGUILayout.Vector2Field() 二维向量字段
//EditorGUILayout.Vector3Field() 三维向量字段
//EditorGUILayout.Vector4Field() 四维向量字段

可以看出该修饰类和效果图对应的关系。我们可以方便的定义检视面板来协助游戏的开发调试,让它直观的显示出帮助消息。

更多的信息可以查看帮助文档:http://www.ceeger.com/Script/Editor/Editor.html

时间: 2025-01-13 05:07:56

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

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 中显示代码中的部分变量,

一、Unity Editor自定义菜单

官方文档:https://unity3d.com/cn/learn/tutorials/topics/interface-essentials/unity-editor-extensions-menu-items 1.菜单栏菜单 [MenuItem("菜单名称")] public static void Method(){}// 需要执行的调用方法 2.可以在资源窗口右键显示 MenuItem("Assets/菜单名称", false, 61)] 3.可以在Proj

自定义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]标记不需要显示的属性,

Unity Editor Extensions – Custom Inspectors

?? 转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/space-uid-18602.html 这是在"Unity Editor Extension"系列的第 2 次帖子. post描述了为创建自定义inspectors面板在 Unity 编辑器的基本步骤.在该系列的下一个posts,我将深入探讨更高级的主题,例如inspectors及Unity's serializa

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

关于Unity实现自定义多边形图片效果

关于Unity实现自定义多边形图片效果 1.创建RawImageEditor编辑器拓展脚本(放在工程中Editor文件夹下,没有则创建) 1 /************************************************* 2 * 项目名称:动态更改图片显示边数 3 * 脚本创建人:魔卡 4 * 脚本创建时间:2018.01.27 5 * 脚本功能:RawImageEditor编辑器功能重写 6 * **************************************

Unity Editor 执行时机的问题

在上上篇博文,我提到了Unity编辑器. 即引用 Unity Editor命名空间,且添加[CustomEditor(typeof(Class))] 就可以定制对应Class的Inspector面板. 但这个类本身,也就是ClassEditor的执行事实上并不需要启动Unity项目 这个并不是什么很难发现的事情,因为编写Editor的过程中,对应类的Inspector面板就会变化 只不过如果这个Editor类存在编译错误的话,就会直接报错,从而项目无法启动 原文地址:https://www.cn

Unity脚本在层级面板中的执行顺序测试4-附加内容

测试4为一些附加内容,后面的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html Unity脚本在层级面板中的执行顺序测试2 http://www.cnblogs.com/hont/p/5034419.html Unity脚本在层级面板中的执行顺序测试3 http://www.cnblogs.com/hont/p/5179427.html 1.基本执行顺序 Awake OnEn

[cb]Unity Editor Toolbar 编辑器扩展

1.Apply to Prefab [把改动应用到Prefab] if (GUILayout.Button("Apply Collider To Prefab")) { PrefabUtility.ReplacePrefab(simActor.Preview, PrefabUtility.GetPrefabParent(simActor.Preview), ReplacePrefabOptions.ConnectToPrefab); }     2.Current SceneView