当前位置:   article > 正文

Unity 编辑器扩展之 Attribute_unity attribute

unity attribute

Unity内置属性[Attribute]是一种类似修饰功能的标签。可以对OnSceneGUI,InspectorGUI,MenuGUI,WindowGUI等实现各种各样的GUI扩展。用户只要添加上特性标签,就能够自由的使用这些扩展功能。下面列出一些常用的标签:

HideInInspector

隐藏属性在Inspector面板上的显示。在继承了MonoBehaviour的类中,用public修饰的变量如果可以被序列化,那么就会在Inspector中显示,使用HideInInspector可以让他不显示。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [HideInInspector]
  5. public string heroName;
  6. }

Header

Header用来给属性添加标题文字。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [Header("Hero current blood")]
  5. public float blood;
  6. }

Tooltip

Tooltip用来显示属性标签的提示文字。当鼠标移动到该属性字段上的时候会出现相应的提示。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [Tooltip("Hero current blood")]
  5. public float blood;
  6. }

Space

Space,空间占位,可以调整两个属性块之间的间隔距离。可以传参数,表示间距大小,单位是像素。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. public float heart;
  5. [Space()]
  6. public float blood;
  7. [Space(20)]
  8. public float money;
  9. }

Range

Range使得用户可以使用Slider对类似于int,float,long,double这一类的数值类型进行改变。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [Range(1, 10)]
  5. public int num1;
  6. [Range(1, 10)]
  7. public float num2;
  8. [Range(1, 10)]
  9. public long num3;
  10. [Range(1, 10)]
  11. public double num4;
  12. }

Mulitline/TextArea

Textfile默认情况下是只有一行的,但同时也能变成复数行显示的TextArea。Multiline和TextArea功能大致上相同,不过Multiline有着[无法依据宽度自动换行]和[不能使用scroll表示]的限制。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [Multiline(5)]
  5. public string multiline;
  6. [TextArea(3, 5)]
  7. public string textArea;
  8. }

ColorUsage

颜色拾取器。第一个参数控制是否显示透明通道,第二个参数控制是否使用HDR。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [ColorUsage(true)]
  5. public Color color1;
  6. [ColorUsage(true,true)]
  7. public Color color2;
  8. }

SerializeField

Unity 默认不会序列化私有变量,如果想强制序列化一个私有变量,那么可以用SerializeField修饰。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [SerializeField]
  5. private string str;
  6. }

ExecuteInEditMode

在 Unity 中继承MonoBehaviour的脚本,并不是一直都会执行的。Unity默认只有在Play Mode下,才会运行场景里GameObject下挂载的脚本。如果想在编辑状态下也执行该脚本可以用ExecuteInEditMode修饰,也可以用ExecuteAlways修饰。

  1. using UnityEngine;
  2. [ExecuteInEditMode]
  3. public class PuzzleHero : MonoBehaviour
  4. {
  5. private void Awake()
  6. {
  7. Debug.Log("Excute In Edit Model");
  8. }
  9. }

HelpURL

在class类上进行帮助文档的链接的设定,设置之后可以点击脚本右上角的问号按钮可以调到对应的网页。

  1. using UnityEngine;
  2. [HelpURL("https://www.xrlmall.top")]
  3. public class PuzzleHero : MonoBehaviour
  4. {
  5. }

AddComponentMenu

可以在UnityEditor的Component的Menu中增加自定义的项目。菜单可以设置多级,使用斜线/分隔即可。在Hierarchy中选中GameObject的时候,点击该菜单项,就可以在GameObject上追加该Component,或者在Inspector面板点击“Add Component”按钮追加。

  1. using UnityEngine;
  2. [AddComponentMenu("Custom/PuzzleHero")]
  3. public class PuzzleHero : MonoBehaviour
  4. {
  5. }

ContextMenu

可以在Inspector的ContextMenu中增加选项,执行某个操作。

  1. using UnityEngine;
  2. public class PuzzleHero : MonoBehaviour
  3. {
  4. [ContextMenu("SaveFile")]
  5. void DoSomething()
  6. {
  7. Debug.Log("save level data to file");
  8. }
  9. }

DisallowMultipleComponent

对一个MonoBehaviour的子类使用这个属性,那么在同一个GameObject上面,最多只能添加一个该Class的实例。

  1. using UnityEngine;
  2. [DisallowMultipleComponent]
  3. public class PuzzleHero : MonoBehaviour
  4. {
  5. }

尝试添加多个的时候,会出现下面的提示。

RequireComponent

在Class上使用,添加对另一个Component的依赖。当该Class被添加到一个GameObject上的时候,如果这个GameObject不含有依赖的Component,会自动添加该Component。且该Componet不可被移除。

  1. using UnityEngine;
  2. [RequireComponent(typeof(Rigidbody))]
  3. public class PuzzleHero : MonoBehaviour
  4. {
  5. }

自动添加Rigidbody,并且不能被移除

MenuItem

快捷键打开资源路径

  1. public class EditorTool
  2. {
  3. //Alt+R打开资源路径
  4. [MenuItem("HSJ/快捷方式/打开UI预制路径 &R")]
  5. static void OpenResourcesUIPanel()
  6. {
  7. Selection.activeObject = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Resources/Prefab/Panel/LoginPanel.prefab");
  8. }
  9. //Alt+S打开脚本路径
  10. [MenuItem("HSJ/快捷方式/打开Panel脚本路径 &S")]
  11. static void OpenScript()
  12. {
  13. Selection.activeObject = AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/Scripts/MessageBoxPanel.cs");
  14. }
  15. //Alt+S打开指定文件夹路径
  16. [MenuItem("HSJ/快捷方式/打开工程目录 &O")]
  17. private static void OpenProjectFolder()
  18. {
  19. EditorUtility.RevealInFinder(Application.dataPath);
  20. }
  21. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号