Unity编辑器扩展——标签属性Attribute

——[HideInInspector]

将公有的变量在Inspector面板上隐藏

[HideInInspector]
public int value;


——[SerializeField]

将私有的变量在Inspector面板上显示出来,但此变量的访问级别还是私有的

[SerializeField]
private int value;


——[Header("标题内容")]

给变量添加标题

[Header("变量")]
public int value;


——[Space(间距数值)]

给变量间添加间距

[Space(50)]
public int value;


——[Tooltip("悬停内容")]

给变量添加悬停内容

[Tooltip("这是一个变量")]
public int value;


——[Range(min,max)]

给int、float、double这种数字类型变量添加范围

[Range(0,10)]
public int value;


——[Multiline(行数)]

给string类型变量设置行数

[Multiline(5)]
public string str;


——[TextArea]

把string类型变量在Inspector面板的显示变成一个TextArea

[TextArea]
public string str;


——[ColorUsage(是否可以设置透明度)]

调用颜色选项框

[ColorUsage(true)]
public Color c;


——[FormerlySerializedAs("原始的变量名")]

例如声明一个变量:public GameObject go1,然后给go1拖拽赋值,当将变量名go1改为go2时,引用会丢失。
可以添加一个FormerlySerializedAs的属性,使属性的参数与第一次声明变量时使用的名称一致,后期调整此变量名就不会出现引用丢失了

[FormerlySerializedAs("go1")]
public GameObject go1;


——[AddComponentMenu(层级/结构)]

将此脚本添加到组件栏中(只能给类添加这个属性)

[AddComponentMenu("Test/MyTest")]
public class Test : MonoBehaviour
{
    
}


——[RequireComponent(typeof(添加的组件))]

添加此脚本时如果没有此组件则自动添加相应的组件(只能给类添加这个属性)

[RequireComponent(typeof(CanvasGroup))]
public class Test : MonoBehaviour
{
    
}


——[ContextMenu(“自定义的操作名”)]

在Inspector面板中小齿轮下增加选项(只能给方法添加这个属性)

[ContextMenu("My Test")]
public void MyMethon()
{
    Debug.Log("这是我的测试方法");
}


——[ContextMenuItemAttribute(“操作名”, “执行的方法名”)]
 
为字段添加一个右键菜单,执行一个此类中的方法(只能给字段添加这个属性)

public class Test : MonoBehaviour
{
    [ContextMenuItemAttribute("Mytest", "MyMethon")]
    public int value;

    public void MyMethon()
    {
        Debug.Log("这是我的测试方法");
    }
}


——[DisallowMultipleComponent]

使一个物体只能添加一个此脚本(只能给类添加这个属性)

[DisallowMultipleComponent]
public class Test : MonoBehaviour
{
  
}


——[ExecuteInEditMode]
让此脚本在Editor模式下也能执行Start、Update、OnGUI等方法(只能给类添加这个属性)

[ExecuteInEditMode]
public class Test : MonoBehaviour
{
    private void Awake()
    {
        print("ExecuteInEditMode");
    }
}


——[MonoPInvokeCallback(接收的代理类型)]
C#(托管代码)中注册方法可以从C++/C(非托管代码)调用

public class Test : MonoBehaviour
{
    internal delegate void TestCallBack(string eventName);

    [MonoPInvokeCallback(typeof(TestCallBack))]
    public static void OnCallBack(string eventName)
    {
        if (eventName == "complete")
        {
            Debug.Log("成功调用");
        }
    }
}


——[DllImport(“DLL名称”)]
C++/C(非托管代码) 的方法可以从C#调用

public class Test : MonoBehaviour
{
    internal delegate void TestCallBack(string eventName);

    [MonoPInvokeCallback(typeof(TestCallBack))]
    public static void OnCallBack(string eventName)
    {
        if (eventName == "complete")
        {
            Debug.Log("成功调用");
        }
    }
}
发布了129 篇原创文章 · 获赞 280 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/LLLLL__/article/details/103923236