美文网首页Unity编辑器开发分享
在MonoBehaviour中可使用的编辑器扩展Attribut

在MonoBehaviour中可使用的编辑器扩展Attribut

作者: 小小小小小丶敏 | 来源:发表于2017-09-25 15:09 被阅读10次

1 改变Inspector的外观
范围
对于数值变量,可以通过添加Range属性来限定面板中数值的范围:

这里写图片描述
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    [Range(1, 10)]
    public int num1;

    [Range(1, 10)]
    public float num2;

    [Range(1, 10)]
    public long num3;

    [Range(1, 10)]
    public double num4;
}

多行/文本区

这里写图片描述
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    [Multiline(5)]
    public string multiline;

    [TextArea(3, 5)]
    public string textArea;
}

2 增加一个功能
ContextMenuItem
ContextMenuItem可以让我们让我们右键点击面板中特定属性而选择自定义的一些函数操作


这里写图片描述

ColorUsage
ColorUsage是一个颜色选择器,可以更改HDR拾色器,启用/禁止Alpha


这里写图片描述
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public Color color1;

    [ColorUsage (false)]
    public Color color2;

    [ColorUsage (true, true, 0, 8, 0.125f, 3)]
    public Color color3;
}

3 调整Inspector外观布局
Header
只是用来显示一个Header,用以区块之间的区分


这里写图片描述
using UnityEngine;
using System;

public class NewBehaviourScript : MonoBehaviour
{
    [Header("Player Settings")]
    public Player player;

    [Serializable]
    public class Player
    {
        public string name;

        [Range(1,100)]
        public int hp;
    }

    [Header("Game Settings")]
    public Color background;
}

Space
绘制空格

这里写图片描述
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [Space(16)]
    public string str1;

    [Space(48)]
    public string str2;
}

Tooltip
作提示用


这里写图片描述
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [Tooltip("これはツールチップです")]
    public long tooltip;
}

HideInInspector
在Inspector中隐藏public变量


这里写图片描述
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public string str1;

    [HideInInspector]
    public string str2;
}

便利Inspector
RequireComponent
要求必须拥有某一组件,如果没有则自动添加


这里写图片描述
using UnityEngine;

[RequireComponent(typeof(Animator))]
public class NewBehaviourScript : MonoBehaviour
{
    Animator animator;

    void Awake ()
    {
        animator = GetComponent<Animator> ();
    }
}

DisallowMultipleComponent
不允许同时拥有两个相同的组件

这里写图片描述

FormerlySerializedAs
原来是这样的

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField]
    string hoge;
}

后来修改代码成了

using UnityEngine;
using UnityEngine.Serialization;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField]
    [FormerlySerializedAs("hoge")]
    string fuga;
}

照理说原来面板上hoge的填充数据会丢失,但因为我们使用了FormerlySerializedAs,所以原来hoge序列化的数据就会被赋值给fuga。


这里写图片描述 这里写图片描述

简化游戏开发
ExecuteInEditMode
不运行游戏,仅仅在Editor下也会运行MonoBehaviour

using UnityEngine;

[ExecuteInEditMode]
public class NewBehaviourScript : MonoBehaviour
{
    [Range(0,10)]
    public int number;

    void Awake ()
    {
        Debug.Log ("Awake");
    }

    void Start ()
    {
        Debug.Log ("Start");
    }

    void Update ()
    {
        Debug.Log ("Update");
    }
}

ContextMenu

给Component添加上下文菜单 这里写图片描述
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [Range (0, 10)]
    public int number;

    [ContextMenu ("RandomNumber")]
    void RandomNumber ()
    {
        number = Random.Range (0, 100);
    }

    [ContextMenu ("ResetNumber")]
    void ResetNumber ()
    {
        number = 0;
    }
}

SelectionBase

当在场景中选择游戏体的时候,指定要选择的游戏对象。比如A的父物体是B,当在场景中点击A的时候,Hierarchy中有限会选中B。(2D中测试出来感觉没用,3D中有用) 这里写图片描述
using UnityEngine;

[SelectionBase]
public class NewBehaviourScript : MonoBehaviour
{
}

本文转自:http://blog.csdn.net/rickshaozhiheng/article/details/52670771

相关文章

网友评论

    本文标题:在MonoBehaviour中可使用的编辑器扩展Attribut

    本文链接:https://www.haomeiwen.com/subject/mnqdextx.html