Scripts" 菜单栏.using U..._application.onbeforerender">
赞
踩
Attribute API 分为unityeditor和unityengine 两种,二者有相似之处,也有不同之处,下面是详细介绍:
1.AddComponentMenu
添加到类的上面,功能就是把该脚本添加到Component下拉菜单下的任何地方,而不仅仅是 "Component->Scripts" 菜单栏.
using UnityEngine; [AddComponentMenu("Transform/Follow Transform")] public class FollowTransform : MonoBehaviour { }
componentOrder 该组件在 component menu的显示顺序,是低还是高
2.BeforeRenderOrder 属性
添加到方法上面,用来自定义Application.onBeforeRender事件注册方法的执行顺序,它执行注册事件的顺序是从低到高,如果没有该属性,默认order为0
比如:
[BeforeRenderOrder(1)]
public void BeforeRender()
{
Debug.Log(1110);
}
[BeforeRenderOrder(0)]
public void BeforeRenders()
{
Debug.Log(1111);
}Application.onBeforeRender += BeforeRender;
Application.onBeforeRender += BeforeRenders;会先执行BeforeRenders方法,因为它的顺序比较靠前
3.ColorUsage属性
添加到color字段上面,用来指示是否显示alpha通道,以及颜色的模式是HDR还是LDR颜色
4.ContextMenu 属性
添加到非静态方法上面,给该脚本组件在属性面板上右键显示该方法,通常用来自动为脚本设置初始化数据
using UnityEngine; public class ContextTesting : MonoBehaviour { /// Add a context menu named "Do Something" in the inspector /// of the attached script. [ContextMenu("Do Something")] void DoSomething() { Debug.Log("Perform operation"); } }
5.ContextMenuItem属性
添加到字段上面,为该字段右键执行一个方法,有两个参数,第一个表示右键显示的名字,第二个是要调用的方法名
using UnityEngine; public class Example : MonoBehaviour { [ContextMenuItem("Reset", "ResetBiography")] [Multiline(8)] string playerBiography = ""; void ResetBiography() { playerBiography = ""; } }
6.CreateAssetMenu属性
写在继承自ScriptableObject类型的类上面,用来在创建该脚本的实例,并以.asset文件存储,第一个是创建的.asset的名字,第二个是在Assets/Create自菜单的路径,比如“transform”,那它就在Assets/Create/transform路径下,第三个是显示顺序
定义如下:
写在字段上面,作用是在属性面板上如果修改了该数值或者该文本,不会立即生效,当你按下enter键后者鼠标点击其它地方的时候才生效
8.DisallowMultipleComponent 属性
写在继承自monobehavior的类上面,不允许该脚本在同一个物体上添加多个,就像image组件一样,一个物体不能同时挂载两个
9.ExcludeFromObjectFactory属性
写在类上面,把该脚本组件以及继承它的脚本,不能用ObjectFactory创建出来
9.1 ObjectFactory 对象工厂,属于editor命名空间
在Editor下创建 UnityEngine.Object 对象,这个过程已经被注册了undo操作,所以是可以撤销的
Static Methods
AddComponent Creates a new component and adds it to the specified GameObject. CreateGameObject Creates a new GameObject. CreateInstance Create a new instance of the given type. CreatePrimitive Creates a GameObject primitive. Events
componentWasAdded 每次使用对象工厂创建物体时的触发事件
10.ExcludeFromPresets属性
写在类上面,这样改脚本组件就不能创建预设了
一个有预设按钮,一个没有预设按钮
11.ExecuteAlways 属性
添加到类上面,表示该脚本一直执行,不管是在运行时还是在editor模式下,默认脚本只在运行时执行
12.GradientUsage属性
写在Gradient 字段上面,用来表示该渐变色是HDR还是正常的LDR颜色模式
Gradient 类和Color对应,用来表示一个渐变色
13.Range 属性
添加到float或者int类型的字段上,以一个slider的形式,限制一个float或者int数字,在一个范围
14.RequireComponent 属性
写在类上,当该脚本组件添加的时候,require的组件自动添加上去
15.RuntimeInitializeOnLoadMethod属性
添加在静态方法上面,来根据RuntimeInitializeLoadType 来决定该方法执行的顺序,是在Awake方法之后Start之前执行
Note: 标记有[RuntimeInitializeOnLoadMethod]属性的静态方法之间的相互执行顺序不确定
。Properties
AfterSceneLoad After Scene is loaded. BeforeSceneLoad Before Scene is loaded. AfterAssembliesLoaded Callback when all assemblies are loaded and preloaded assets are initialized. BeforeSplashScreen Immediately before the splash screen is shown. SubsystemRegistration Callback used for registration of subsystems
16.SelectionBase属性
把这个属性添加到一个类上面,并把该脚本添加到一个物体上面,当你在场景中选中该物体的子物体时,会快速定位到它身上,就比如你点击一个prefab的子物体,它会自动定位到根节点一样,单击一次,会定位到挂有该脚本的物体,单击两次会定位到你点击的物体
添加到字段上面,和字段没有内在联系,添加一个标头,这也是默认继承自PropertyAttribute的属性,然后通过PropertyDrawer绘制过来的,系统自带的
- using UnityEngine;
- public class Example : MonoBehaviour
- {
- [Header("Health Settings")]
- public int health = 0;
- public int maxHealth = 100;
-
- [Header("Shield Settings")]
- public int shield = 0;
- public int maxShield = 0;
- }
-
添加到类上面,为一个类提供一个方法说明地址,按住CTRL键可转到连接,点击下面的图表就会转到说明
- using UnityEngine;
- using UnityEditor;
-
- [HelpURL("http://example.com/docs/MyComponent.html")]
- public class MyComponent
- {
- }
属性在属性面板上隐藏
- using UnityEngine;
- public class Example : MonoBehaviour
- {
- [HideInInspector]
- public int p = 5;
- }
20.InspectorName属性
添加到枚举类型的项上,使用这个属性改变在属性面板中的名字
using UnityEngine; public enum ModelImporterIndexFormat { Auto = 0, [InspectorName("16 bits")] UInt16 = 1, [InspectorName("32 bits")] UInt32 = 2, }
限定一个float或者int类型的最小值
声明一个可以多行编辑的字符串
序列化一个私有字段,在面板上显示出来
24.SharedBetweenAnimators属性
添加到继承自 StateMachineBehaviour 的类上面,只对同一层的动画状态机通用这个脚本,比方说这一层动画有5个state,那么这5个state只要有一个挂载该脚本就可以。比如下面的代码,这五个state只要是进入的时候都会执行OnStateEnter方法
using UnityEngine; [SharedBetweenAnimators] public class AttackBehaviour : StateMachineBehaviour { public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("OnStateEnter"); } }layerIndex是该动画层的索引,及动画状态机的layers属性
添加到字段上面,和字段没有内在联系,继承自 PropertyAttribute ,然后通过PropertyDrawer实现的效果,unity自带的,以像素为单位,空出几个格
- using UnityEngine;
- public class Example : MonoBehaviour
- {
- int health = 0;
- int maxHealth = 100;
- [Space(10)] // 10 pixels of spacing here.
- int shield = 0;
- int maxShield = 0;
- }
添加到string上面,实现一个高度可调可以滚动的字符串
你可以声明区域框显示的最小和最大的字符串的行数, minimum and maximum , 文字区域会根据文字的内容自动扩展输入框的大小,超出的部分会有一个滚动条
Note: 最大行是指文本区域显示字符串的行数。用户输入的行数没有上限。
- using UnityEngine;
-
- public class TextAreaExample : MonoBehaviour
- {
- [TextArea]
- public string MyTextArea;
- }
添加到字段上面,为一个字段显示一个说明,当鼠标停留在上面的时候
using UnityEngine;
public class Example : MonoBehaviour
{
[Tooltip("Health value between 0 and 100.")]
int health = 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。