Unity Editor 基础篇:Build-In Attrib

作者: 小小小小小丶敏 | 来源:发表于2017-09-26 18:03 被阅读28次

    Attributes属性:
    属于U3D的RunTimeClass,所以要加上命名空间: using UnityEngine; using System.Collections;
    1.AddComponentMenu AddComponentMenu 属性允许将一个脚本添加到 Component 菜单中,然后你便可以通过 Component ->(你设置的名字)为一个选中的游戏对象创建该脚本,如下所示:

    [AddComponentMenu("Learning/People")]public class People : MonoBehaviour {}
    
    这里写图片描述
    2.RequireComponent() RequireComponent()属性会自动帮你添加你需要的组件,如果已经存在则不再重复添加,且不能移除,如下所示:
    [AddComponentMenu("Learning/People")][RequireComponent(typeof(Rigidbody))]public class People : MonoBehaviour {}
    

    提示:经过测试,我发现一个问题,如果脚本已经挂在物体身上,然后再修改脚本,为添加 RequireComponent 属性的话,完全不起作用,因此建议大家在用此属性的时候要注意。
    3.ContextMenu()、ContextMenuItem() ContextMenu()属性允许添加一个命令到该组件上,你可以通过右键或者点击设置图标来调用到它(一般用于函数),且是在非运行状态下执行该函数; ContextMenuItem()属性允许添加一个命令到该变量上,可通过右击变量来调用对应方法 如下所示:

    [AddComponentMenu("Learning/People")][RequireComponent(typeof(Rigidbody))]
    public class People : MonoBehaviour { 
    public string name;
     public int age; 
    [ContextMenu("OutputInfo")] 
    void OutputInfo()
     { print(name+"|"+age); }}
    
    这里写图片描述
    public class People : MonoBehaviour {
     [ContextMenuItem("右击时显示名", "OutputInfo")]
     public int age; 
    public string name="Hia";
     void OutputInfo() 
    { 
    print(name+"|"+age); }
    }
    
    这里写图片描述
    4.HelpURL() HelpURL()提供一个自定义的文档链接,点击组件上的文档图标既能打开到你指定的链接,如下所示:
    [HelpURL("http://www.baidu.com")]
    public class People : MonoBehaviour
     {
     public string name;
     public int age;
    }
    
    这里写图片描述
    提示:填写链接时,一定要写上 http:// 或者 https://,否则将无任何反应。
    5.InitializeOnLoad 启动事件监听 [InitializeOnLoad] :在启动Unity的时候运行编辑器脚本**
    6.Range()、Multiline()、header() Range()属性用于将一个值指定在一定的范围内,并在Inspector面板中为其添加滑块; Multiline()属性用于给 string 类型添加多行输入; header()属性用于添加属性的标题,具体操作如下所示:
    public class People : MonoBehaviour {
     [Header("BaseInfo")] [Multiline(5)] 
    public string name;
     [Range(-2,2)] 
    public int age;
    }
    
    这里写图片描述

    **8.Serializable、SerializeField **1/ Serializable这个属性可以让子类(继承类)的变量属性显示在检视面板中,也能序列化它。(JS的话完全不需要这个属性。)

    [System.Serializable]
    public class Boy{ 
    public int stength;
    }
    public class People : MonoBehaviour
     { 
    public Boy bb;
    }
    
    这里写图片描述

    2/ SerializeField 序列化域(强制序列化):可以将私有变量序列化,将U3D的内建变量序列化等。

    [SerializeField, Range(-2, 2)]
    private int age;
    

    当然公有变量也可以在面板隐藏: [HideInInspector] 面板隐藏 [NonSerialized] 不被序列化(不被序列化且不在面板显示)
    Unity可以序列化的类型如下:

    这里写图片描述
    文末:再次声明请尊重楼主版权: http://mp.weixin.qq.com/s/g7nClmQGPwU2o4yyBm6LcQ

    相关文章

      网友评论

      • 雨落随风:这个公众号我之前关注了,确实好文哦

      本文标题:Unity Editor 基础篇:Build-In Attrib

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