UnityEditor扩展 - 编辑器中的内置属性Attribute

Unity内置属性[Attribute]是一种类似修饰功能的标签。可以对OnSceneGUI,InspectorGUI,MenuGUI,WindowGUI等实现各种各样的GUI扩展。在这一章里将举例介绍一些常用的内置属性,并使用它们继续进行界面的自由定制。

 

[Range(min, max)] //限定float, int 取值范围。

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;
}

 

 

[Multiline(lines)] //行数。

[TextArea(minLines, maxLines)] //文本域。

using UnityEngine;
using System.Collections;

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

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

收拢Inspector时效果

展开Inspector时效果


 

[ContextMenuItem("string")] //右键点击Inspector中的对应名字,快捷出现可选的函数执行。

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [ContextMenuItem("Random", "RandomNumber")]
    [ContextMenuItem("Reset", "ResetNumber")]
    public int number;

    void RandomNumber()
    {
        number = Random.Range(0, 100);
    }

    void ResetNumber()
    {
        number = 0;
    }
}


 

[ContextMenu("string")] //与上面类似,但是要点击齿轮图标或在脚本名上点右键。

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;
    }
}


 

[ColorUsage(bool)] //调用颜色选项框。

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;
}

 

 

[Header("string")] //增加标题栏。

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(height)] //行与行之间添加空白行。

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public string str1;
    [Space(20)]
    public string str2;
}


 

[Tooltip("string")] //显示鼠标悬停所在函数的说明。

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [Tooltip("说明内容")]
    public long tooltip;
}

[HideInInspector] //不显示在inspector但是被序列化。即使是public修饰的变量,也不被显示,不可以被外部类调用。

 

[System.NonSerialized] //不被序列化,也不显示。

 

[SerializeField] //将private修饰的变量序列化。

[RequireComponent("componentName")] //自动挂载某组件。

 

[DisallowMultipleComponent] //添加在Class上方,当有别的脚本继承该Class,别的脚本不能被挂载在object上。


 

[AddComponentMenu("path")] //在Menu上显示该脚本。


 

[ExecuteInEditMode] //一些需要在run才能赋值的变量,直接在编辑器中被赋值。

 

[SelectionBase] //在Scene View中单击选择它的子物体时,会首先选中它自己。点2次子物体,才会选中要选的子物体。把该脚本的物体作为base的效果。

如图父子结构,在Scene View中操作:

    • 单击Sphere → 选中Sphere
    • 单击Cube → 选中Cube
    • 单击Capsule → 选中 Cube


 

其他与Editor无关的属性列举

  • [RPC] [SyncVar] [Command] 网络相关

  • [ImageEffectOpaque] ImageEffectTransformsToLDR

  • [DllImport("DLL Name")] 导入动态链接库

 

最后上脚本,综合了上述的实例运用。

using UnityEngine;

[SelectionBase] //在Scene View中点选它的子物体时,会首先选中它。点2次才会选中要选的子物体。把该脚本的物体作为base的效果。
[AddComponentMenu("Scripts/Player")] //把本脚本添加到菜单中
[DisallowMultipleComponent] //继承该Class的脚本不能被挂载
[RequireComponent(typeof(Animator))] //自动添加组件
[ExecuteInEditMode] //一些需要在run才能赋值的变量,直接在编辑器中被赋值。
public class Player : MonoBehaviour
{
    [Header("Player")] 
    public string playerName;
    [Multiline(2)][Tooltip("The titles")]
    public string nikeName;
    [TextArea(2, 2)]
    public string address;

    [Space(20)]
    public Color color1; //RGBA

    [ColorUsage(false)]
    public Color color2; //RGB

    [ColorUsage(true, true, 0, 8, 0.125f, 3)] //RGBA 增加亮度、曝光度
    public Color color3;
    [Space(20)]

    [Range(0,100)]
    public float health;
    [Range(10, 20)]
    public int damage;

    [Header("Pet")]
    public string pet1Name;

    [ContextMenuItem("Random", "RandomNumber")]
    [ContextMenuItem("Reset", "ResetNumber")]
    public int pet1Level;

    void RandomNumber()
    {
        pet1Level = Random.Range(1, 20);
    }

    void ResetNumber()
    {
        pet1Level = 1;
    }

    [Range(1, 100)]
    public int pet1Damage;

    [ContextMenu("RandomNumber")]
    void RandomDamage()
    {
        pet1Damage = Random.Range(1, 100);
    }

    [ContextMenu("ResetNumber")]
    void ResetDamage()
    {
        pet1Damage = 1;
    }

    [HideInInspector]
    public int id;
    [System.NonSerialized]
    public int age;

    [SerializeField]
    Animator animator;

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

总体效果



  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值