当前位置:   article > 正文

Unity常用标签_unity 标签

unity 标签

标签的概念

标签在C#中也被叫做特性。特性(attribute)是一种允许我们向程序的程序集添加元数据的语言结构。它是用于保存程序结构信息的特殊类型的类。

特性的目的:告诉编译器把程序结构的某组元数据嵌入程序集。可以通过特性应用到结构来实现

特性的使用

1、通过在结构前放置特性片段来应用特性。
2、特性片段由方括号包围特性名和参数列表构成。

Unity的常用标签

标记字段

[Space]

[Space]:可以与上面的字段形成一个间隙,并且可以带参数。例如 [Space(20)]

代码

 [Space(30)]
    public int HP;
    [Space(50)]
    public string MP;
  • 1
  • 2
  • 3
  • 4

例图
在这里插入图片描述


[Header(“XXX”)]

[Header(“XXX”)]:在Inspector面板上给定义的字段的上一行加段描述,可以将属性隔开,形成分组的感觉。

代码:

 [Header("个人属性")]
    public int HP;
    public int MP;
    [Header("天赋属性")]
    public string Power;
  • 1
  • 2
  • 3
  • 4
  • 5

例图:
在这里插入图片描述


[Tooltip(“XXX”)]

[Tooltip(“XXX”)]:在Inspector面板上鼠标移上定义的字段弹出描述 。

代码:

 [Tooltip("个人属性")]
    public int HP;
    public int MP;
[Tooltip("天赋属性")]
    public string Power;
  • 1
  • 2
  • 3
  • 4
  • 5

例图:
在这里插入图片描述


[Range(min, max)]

[Range(min, max)]:限制数值变量的取值范围并以滑动条显示在Inspector面板上。

代码:

[Range(1,12)]
    public int HP;
    public int MP;
  • 1
  • 2
  • 3

例图:
在这里插入图片描述


[SerializeField]

[SerializeField]:限在Inspector版面中显示非public属性,并且序列化
序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己的好的保存对象状态的机制,那就是序列化。

总结:Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里(系列化),并且可以从其它地方把该Byte 流里的数据读出来(反序列化)。
[Serializable]:告诉C#系统,下面类的数据可被写盘、读盘。用于类的上面

代码:

 [SerializeField]
    public int HP;
    public int MP;
 [SerializeField]
    string Power;
  • 1
  • 2
  • 3
  • 4
  • 5

例图:
在这里插入图片描述


[NonSerialized]

[NonSerialized]:使属性在Inspector中隐藏,但是还是可序列化,想赋值可以通过写程序赋值序列化

代码:


    [NonSerialized]
    public int HP;
    public int MP;
    [SerializeField]
    string Power;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

例图:
在这里插入图片描述


序列化标签

[HideInInspector]使属性在Inspector中隐藏,但是还是可序列化,想赋值可以通过写程序赋值序列化
[System.Serializable]使自定义的类能进行序列化,即当做一个public成员的时候可以在Inspector显示
[FormerlySerializedAs(“XXX”)]该属性可以令变量以另外的名称进行序列化,并且在变量自身修改名称的时候,不会丢失之前的序列化的值

[ContextMenuItem(“显示的方法名”,”方法”)]

[ContextMenuItem(“显示的方法名”,”方法”)]:标记字段,给字段右键菜单段添加一个方法

代码:


    [ContextMenuItem("add","fun")]
    public int HP;
    public int MP;

    void fun()
    {
        HP += 1;
        print(HP);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

例图:
在这里插入图片描述


[MultilineAttribute]

[MultilineAttribute]:在string类型上使用,可以在Editor上输入多行文字

代码:

  public int HP;
    public int MP;
    [MultilineAttribute]
    public  string Power;
  • 1
  • 2
  • 3
  • 4

例图:
在这里插入图片描述


[TextAreaAttribute]

[TextAreaAttribute]:该属性可以把string在Inspector上的编辑区变成一个TextArea

代码:

     public int HP;
    public int MP;
    [TextAreaAttribute]
    public  string Power;
  • 1
  • 2
  • 3
  • 4

例图:
在这里插入图片描述


标记类/方法

[RequireComponent(typeof(ClassName))]

[RequireComponent(typeof(ClassName))]:将被标记的类拖到(或者AddComponent)GameObject上时,自动再给你加上“ClassName”这个类 。

代码:

 [RequireComponent(typeof(Rigidbody2D))]
public class MyAttribute : MonoBehaviour
{
    public int HP;
    public int MP;
    public  string Power;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

例图:
在这里插入图片描述

作用:可以避免给一个物体重复添加组件,或者漏加组件


[ExecuteInEditMode]

[ExecuteInEditMode]:在编辑界面让你的功能(类)(非Play模式)起作用。任何添加了该组件的对象能够在EditMode下执行相应生命周期函数.。Unity中默认情况下,脚本只有在运行的时候才被执行,加上此属性后,不运行程序,也能执行脚本。

代码:

[ExecuteInEditMode]
public class MyAttribute : MonoBehaviour
{
    public int HP;
    public int MP;
    public  string Power;

    string a = "123";

    public void Speak()
    {
        Debug.Log(a);
        print("asdf");//信息输出需要在方法中

    }
    public void Start()
    {
        Speak();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

例图:

在这里插入图片描述


[AddComponentMenu(“XXX/XX/XXX”)]

[AddComponentMenu(“XXX/XX/XXX”)]:让Component菜单下出现你自定义的类,位置是“XXX/XX/XXX”

代码:

[AddComponentMenu("AR/MyAttribute")]
public class MyAttribute : MonoBehaviour
  • 1
  • 2

例图:

在这里插入图片描述


[CustomEditor(typeof(ClassName))]

[CustomEditor(typeof(ClassName))]:声明一个Class为自定义Editor的Class,可以制作一个自定义编辑器 。
代码:

[CustomEditor(typeof(Rigidbody2D))]
public class editortest : Editor
{
    public override void OnInspectorGUI()
    {
        if (GUILayout.Button("拓展按钮"))
        {
            base.OnInspectorGUI();
        }
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

例图:
在这里插入图片描述

注意:对编辑器拓展时,原有的功能还在。


[MenuItem(“一级菜单名/二级菜单名 _全局快捷键”]

[MenuItem(“一级菜单名/二级菜单名 _全局快捷键”]:在菜单中出现选项栏,执行对应功能。注:对应的函数必须是static
代码:

   [MenuItem("我是菜单栏的/我是第一级/我是第二个 _b")]
    public static void Speak()
    {
             print("asdf");
    }
  • 1
  • 2
  • 3
  • 4
  • 5

例图:
在这里插入图片描述

格式注解
[MenuItem(“一级菜单名/二级菜单名 _全局快捷键”]全局快捷键控制菜单选项
[MenuItem(“一级菜单名/二级菜单名”,false,1)]第二个参数是true则是是给该菜单项添加验证 ,第三个参数决定菜单的优先级


[ContextMenu(“菜单选项名”)]

[ContextMenu(“菜单选项名”)]
[MenuItem(“CONTEXT/组件名/菜单名”)]
 标记函数:在Inspector面板,右击包含这条标记的脚本,出现“菜单名”的菜单选项。
  注:对应的函数必须是static
  标记的函数可以添加 MenuCommand cmd 参数,cmd.context转换为当前组建类型后操作

点击组件中设置(鼠标右键),可以弹出Context菜单。
代码:


[MenuItem("CONTEXT/contexttext/NEW CONTEXT2")]
    public static void speak()
    {
        print("adf");
    }
    
    [ContextMenu("Do Something")]
   public void DoSomething()
    {
        Debug.Log("Do Something.");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

例图:
在这里插入图片描述


[CreateAssetMenu(menuName = “MySubMenue/Create XXX “)]

[CreateAssetMenu(menuName = “MySubMenue/Create XXX “)]
标记类,可以给project面板下的Create 菜单下新建一个自定义子菜单,用于新建自定义资源
用于ScriptableObject的子类,将这个类(相当于资源文件添加到Asset菜单项中)

[CreateAssetMenu(fileName = “Bullet”, menuName = “New Bullet”, order = 1)]
作用在 Assets 文件夹下,鼠标右键,菜单栏中添加一个按钮项,菜单名为 menuName,并执行生成名为 fileName 的脚本,order 为按钮显示顺序
代码:

[CreateAssetMenu(menuName = "MySubMenue/Create XXX")]
public class MyAttribute : ScriptableObject

  • 1
  • 2
  • 3

例图:
在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/122684?site
推荐阅读
相关标签
  

闽ICP备14008679号