博客
关于我
Unity Editor 基础篇(一):Build-In Attribute
阅读量:627 次
发布时间:2019-03-12

本文共 2994 字,大约阅读时间需要 9 分钟。

本文参自:http://mp.weixin.qq.com/s/g7nClmQGPwU2o4yyBm6LcQ

本文为本人学习上连接的笔记有改动,请点击以上链接查看原文,尊重楼主知识产权。

关于 Unity 内置属性可以从到官方文档中查询,本篇文章只介绍一些常用的内置属性。

官方文档:https://docs.unity3d.com/ScriptReference/AddComponentMenu.html


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

这里写图片描述

简单的分解一下:

1/ 第9行,我们使用了 [Header(“BaseInfo”)] 为其设置了标题(为“BaseInfo”),如上图所示。

2/ 第10行,我们使用了 [Multiline(5)] 为其 name 属性添加了5行输入,如上图所示,明显输入框变大了。
3/ 第12行,我们使用了 [Range(-2,2)] 为其 age 属性指定了一个(-2,2)的范围,并且为其添加了一个滑块,如上图所示。


7.Tooltip()、Space()

Tooptip()属性用于在 Inspector 面板中,当鼠标停留在设置了Tooltip()的属性添加指定的提示;
Space()用于为在 Inspector 面板两属性之间添加指定的距离,如下所示:

public class People : MonoBehaviour {    [Header("BaseInfo")]    [Multiline(5)]    public string name;        [Range(-2, 2)]    public int age;        [Space(100)]    [Tooltip("用于设置性别!")]    public string sex;

这里写图片描述


**8.Serializable、SerializeField **

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

[System.Serializable]public class Boy{    public int stength;}public class People : MonoBehaviour {    public Boy bb;}

这里写图片描述

不加Serializable的话,bb这个变量看不到:

在这里插入图片描述

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

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

当然公有变量也可以在面板隐藏:

[HideInInspector] 面板隐藏
[NonSerialized] 不被序列化(不被序列化且不在面板显示)

Unity可以序列化的类型如下:

这里写图片描述


文末:再次声明请尊重楼主版权:

http://mp.weixin.qq.com/s/g7nClmQGPwU2o4yyBm6LcQ

转载地址:http://gqzxz.baihongyu.com/

你可能感兴趣的文章
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select as 多个_MySQL 中 根据关键字查询多个字段
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>