开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2212

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 900|回复: 16

[海澜] Unity-Attributes-自带特性

[复制链接]  [移动端链接]
排名
11188
昨日变化
3

9

主题

25

帖子

186

积分

Rank: 9Rank: 9Rank: 9

UID
164034
好友
0
蛮牛币
3662
威望
0
注册时间
2016-8-24
在线时间
74 小时
最后登录
2018-5-15
发表于 2018-4-29 18:01:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
# AddComponentMenu

> AddComponentMenu属性允许您将脚本放置在“组件”菜单中的任何位置,而不仅仅是“组件 - >脚本”菜单。
您可以使用它来更好地组织“组件”菜单,这样可以在添加脚本时改进工作流程。重要提示:您需要重新启动。

*  **componentOrder**   组件菜单中的组件顺序(低于顶部)。
* **AddComponentMenu**  在“组件”菜单中添加一个项目。
```
using UnityEngine;

[AddComponentMenu("Transform/Follow Transform")]
public class FollowTransform : MonoBehaviour
{
}
```
#### 效果如下
![](?imageMogr2/auto-orient/strip)

# AssemblyIsEditorAssembly
> 装配级属性。具有此属性的程序集中的任何类将被视为编辑器类。
**构造函数**
[AssemblyIsEditorAssembly](https://docs.unity3d.com/ScriptReference/AssemblyIsEditorAssembly-ctor.html)

# ContextMenu
> 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");
    }
}
```

* [ContextMenu](https://docs.unity3d.com/ScriptReference/ContextMenu-ctor.html) 将功能添加到组件的上下文菜单。
#### 效果如下

![](?imageMogr2/auto-orient/strip)


# ContextMenuItemAttribute
> 使用此属性将上下文菜单添加到调用命名方法的字段。
```
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    [ContextMenuItem("Reset", "ResetBiography")]
    [Multiline(8)]
    public string playerBiography = "";
    void ResetBiography()
    {
        playerBiography = "";
    }
}
```
#### 效果如下
![](?imageMogr2/auto-orient/strip)

# CreateAssetMenu
> [fileName](https://docs.unity3d.com/ScriptReference/CreateAssetMenuAttribute-fileName.html)
新创建的此类实例使用的默认文件名。(创建文件必须以 .asset 结尾)
[menuName](https://docs.unity3d.com/ScriptReference/CreateAssetMenuAttribute-menuName.html)
此类型显示的名称显示在“资产/创建”菜单中。
[order](https://docs.unity3d.com/ScriptReference/CreateAssetMenuAttribute-order.html)
菜单项在资产/创建菜单中的位置。

```
using UnityEngine;

[CreateAssetMenu(fileName = "自定义资源.asset", menuName = "菜单/子项0")]
public class CreateAsset : ScriptableObject
{
    public string Name = "自定义资源";

    public Vector3[] Pos = new Vector3[10];
}
```

#### 效果如下
![](?imageMogr2/auto-orient/strip)

# DelayedAttribute
> 用于在脚本中使float,int或string变量的属性被延迟。

当使用此属性时,float,int或text字段将不会返回一个新的值,直到用户按下enter或焦点离开该字段。

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DelayedAttributeExample : MonoBehaviour
{
    [DelayedAttribute()]
    public string content;

}
```
#### 效果如下
![](?imageMogr2/auto-orient/strip)

# DisallowMultipleComponent
> 防止将相同类型(或子类型)的MonoBehaviour多次添加到GameObject。
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[DisallowMultipleComponent]
public class Disallow : MonoBehaviour
{

}
```

#### 效果如下
![](?imageMogr2/auto-orient/strip)


# ExecuteInEditMode
> 使脚本的所有实例在编辑模式下执行。

默认情况下,MonoBehaviours只能在播放模式下执行。
通过添加此属性,MonoBehaviour的任何实例将在编辑器不处于播放模式时执行其回调函数。

这些功能不会像播放模式一样被调用。

[更新](https://docs.unity3d.com/ScriptReference/MonoBehaviour.Update.html)仅在场景中的某些内容更改时才调用。当游戏视图接收到一个[事件](https://docs.unity3d.com/ScriptReference/Event.html)时,[OnGUI](https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnGUI.html)被调用。[OnRenderObject](https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnRenderObject.html)和其他渲染回调函数在场景视图或游戏视图的每次重绘时都被调用。
另请参见:[runInEditMode](https://docs.unity3d.com/ScriptReference/MonoBehaviour-runInEditMode.html)。
```
using UnityEngine;

[ExecuteInEditMode]
public class PrintAwake : MonoBehaviour
{
    void Awake()
    {
        Debug.Log("Editor causes this Awake");
    }

    void Update()
    {
        Debug.Log("Editor causes this Update");
    }
}
```

#### 效果如下
![](?imageMogr2/auto-orient/strip)

# GUITargetAttribute
> 控制对应的OnGUI在那个Display上显示
```
using UnityEngine;
public class ExampleClass1 : MonoBehaviour
{
    // Label will appear on display 0 and 1 only
    [GUITarget(0, 1)]
    void OnGUI()
    {
        GUI.Label(new Rect(10, 10, 300, 100), "Visible on TV and Wii U GamePad only");
    }
}
```

#### 效果如下

![](?imageMogr2/auto-orient/strip)

# HeaderAttribute
> 在Inspector 中显示属性对应属性的注释
使用此
[PropertyAttribute](https://docs.unity3d.com/ScriptReference/PropertyAttribute.html)在检查器中的某些字段上方添加标题。
标题是使用[DecoratorDrawer](https://docs.unity3d.com/ScriptReference/DecoratorDrawer.html)完成的。

```
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    [Header("生命 Settings")]
    public int health = 0;
    public int maxHealth = 100;
    [Header("防御 Settings")]
    public int shield = 0;
    public int maxShield = 0;
}
```

#### 效果如下
![](?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

# HelpURLAttribute
> 帮助图标对应跳转的URL(注意此类需要继承MonoBehaviour,不继承在2017测试跳转地址无效)

```
using UnityEngine;
using UnityEditor;

[HelpURL("http://www.jianshu.com/u/84e03bc5c4a6")]
public class MyComponent:MonoBehaviour
{
}
```

#### 效果如下
![](?imageMogr2/auto-orient/strip)

# HideInInspector
> 隐藏在Inspector面板中显示的Public属性
```
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    [HideInInspector]
    public int Hide = 0;

    [Header("生命 Settings")]
    public int health = 0;
    public int maxHealth = 100;
    [Header("防御 Settings")]
    public int shield = 0;
    public int maxShield = 0;
}
```

####效果如下

![](?imageMogr2/auto-orient/strip)

# ImageEffectAllowedInSceneView
> 具有此属性的任何图像效果可以渲染到场景视图相机中。
如果您希望将图像效果应用于场景视图相机,则会添加此属性。效果将应用于相同的位置,并且具有与相机效果相同的值。(5.4开始新加的特性,目前不知道怎么用)

# MultilineAttribute
> 用于使字符串值的属性显示在多行文本区域中。
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Example1 : MonoBehaviour
{
    [MultilineAttribute(10)]
    public string str = "";

}
```
#### 效果如下

![](?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


# PreferBinarySerialization
> 这对于包含大量数据的自定义资产类型很有用。始终保持存储为二进制可以提高读/写性能,并在磁盘上生成更紧凑的表示。(说白了就是一二进制形式保存提高性能)

```
using UnityEngine;


[CreateAssetMenu]
[PreferBinarySerialization]
public class CustomData : ScriptableObject
{
    public float[] lotsOfFloatData = new[] { 1f, 2f, 3f };
    public byte[] lotsOfByteData = new byte[] { 4, 5, 6 };
}
```

# PropertyAttribute
> 派生自定义属性属性的基类。
使用它来创建脚本变量的自定义属性。

自定义属性可以与自定义的
[PropertyDrawer(https://docs.unity3d.com/2017.2/Documentation/ScriptReference/PropertyDrawer.html)类挂钩,以控制如何在Inspector中显示具有该属性的脚本变量。
另请参见:[PropertyDrawer](https://docs.unity3d.com/2017.2/Documentation/ScriptReference/PropertyDrawer.html)类。

# RangeAttribute
> 用于在脚本中创建一个float或int变量的属性被限制在一个特定的范围内。
当使用此属性时,float或int将在Inspector中显示为滑块,而不是默认数字字段

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Example1 : MonoBehaviour
{
    [RangeAttribute(0,1000f)]
    public int speed;
}
```
#### 效果如下

![](?imageMogr2/auto-orient/strip)

# RequireComponent
> RequireComponent属性自动将所需组件添加为依赖关系。
当您将一个使用RequireComponent的脚本添加到GameObject时,所需的组件将自动添加到GameObject中。这有助于避免安装错误。例如,脚本可能需要将Rigidbody总是添加到同一个GameObject中。使用RequireComponent这将自动完成,因此您永远不会得到设置错误。请注意,RequireComponent仅在组件添加到GameObject的时刻检查缺少的依赖关系。GameObject缺少新依赖关系的组件的现有实例将不会自动添加这些依赖关系。(自动添加指定组建,有组件的不添加,没有的添加)

```
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class PlayerScript : MonoBehaviour
{
    Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        rb.AddForce(Vector3.up);
    }
}
```
#### 效果如下
![](?imageMogr2/auto-orient/strip)

# RuntimeInitializeOnLoadMethodAttribute
> 允许运行时类方法在运行时加载游戏时被初始化,而不需要用户的操作。
标记[RuntimeInitializeOnLoadMethod]的方法在游戏加载后被调用。这是在Awake方法被调用之后。
注意:[RuntimeInitializeOnLoadMethod]不保证标记的方法的执行顺序。调用的方法需静态


**场景加载前调用**     
```
[RuntimeInitializeOnLoadMethodAttribute(RuntimeInitializeLoadType.BeforeSceneLoad)]
```
**场景加载后调用**  
```
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
```   

```
// Create a non-MonoBehaviour class which displays
// messages when a game is loaded.
using UnityEngine;

class MyClass
{
    [RuntimeInitializeOnLoadMethod]
    static void OnRuntimeMethodLoad()
    {
        Debug.Log("场景加载和游戏运行后");
    }

    [RuntimeInitializeOnLoadMethod]
    static void OnSecondRuntimeMethodLoad()
    {
        Debug.Log("SecondMethod场景加载和游戏运行后");
    }
}
```

#### 效果如下

![](?imageMogr2/auto-orient/strip)

# SelectionBaseAttribute
> 将此属性添加到脚本类以将其GameObject标记为用于场景视图挑选的选择基础对象。
在Unity Scene View中,单击选择对象时,Unity将尝试找出最适合您选择的对象。如果单击作为预制体一部分的对象,则选择预制根的根,因为预制根被视为选择库。您也可以使其他对象也被视为选择库。您需要使用SelectionBase属性创建一个脚本类,然后您需要将该脚本添加到GameObject中。

```
using UnityEngine;

[SelectionBase]
public class PlayerScript : MonoBehaviour
{

}
```
#### 效果如下

![](?imageMogr2/auto-orient/strip)

# SerializeField
> 在Inspector可以看到标记为private的属性
```
using UnityEngine;

public class SomePerson : MonoBehaviour
{
    //This field gets serialized because it is public.
    public string firstName = "John";

    //This field does not get serialized because it is private.
    private int age = 40;

    //This field gets serialized even though it is private
    //because it has the SerializeField attribute applied.
    [SerializeField]
    private bool hasHealthPotion = true;

    void Start()
    {
        if (hasHealthPotion)
            Debug.Log("Person's first name: " + firstName + " Person's age: " + age);
    }
}
```

#### 效果如下
![](?imageMogr2/auto-orient/strip)

# SharedBetweenAnimatorsAttribute
> SharedBetweenAnimatorsAttribute是一个属性,指定该StateMachineBehaviour应仅实例化一次,并在所有Animator实例之间共享。
此属性减少每个控制器实例的内存占用。

程序员可以选择哪个StateMachineBehaviour可以使用此属性。
请注意,如果您的StateMachineBehaviour更改一些成员变量,它将影响使用它的所有其他Animator实例。
另请参见:[StateMachineBehaviour](https://docs.unity3d.com/2017.2/Documentation/ScriptReference/StateMachineBehaviour.html)类。
```
using UnityEngine;

[SharedBetweenAnimators]
public class AttackBehaviour : StateMachineBehaviour
{
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        Debug.Log("OnStateEnter");
    }
}
```

# SpaceAttribute
> 使用此
[PropertyAttribute](https://docs.unity3d.com/2017.2/Documentation/ScriptReference/PropertyAttribute.html)在检查器中添加一些间距。
间距使用[DecoratorDrawer](https://docs.unity3d.com/2017.2/Documentation/ScriptReference/DecoratorDrawer.html)完成。

```
using UnityEngine;
using System.Collections;

public class ExampleClass2 : MonoBehaviour
{
    public int health = 0;
    public int maxHealth = 100;
  [Space(10)]
    public int shield = 0;
    public int maxShield = 0;
}
```

#### 效果如下

![](?imageMogr2/auto-orient/strip)

# TextAreaAttribute
> 使用高度灵活和可滚动的文本区域编辑字符串的属性。
您可以指定TextArea的最小和最大行,并且字段将根据文本的大小进行扩展。如果文本大于可用区域,则会显示一个滚动条。

```
using UnityEngine;

public class TextAreaExample : MonoBehaviour
{
    [TextArea()]
    public string MyTextArea;
}
```
#### 效果如下
![](?imageMogr2/auto-orient/strip)

# TooltipAttribute
> 在“检查器”窗口中指定一个字段的工具提示。

```
using UnityEngine;
using System.Collections;

public class ExampleClass3 : MonoBehaviour
{
    [Tooltip("Health 值 从 0 到 100.")]
    public int health = 0;
}
```
#### 效果如下
![](?imageMogr2/auto-orient/strip)

# UnityAPICompatibilityVersionAttribute
> 声明一个程序集与特定的Unity API兼容(API明智)。由内部工具使用,以避免处理程序集,以确定程序集是否可能使用旧的Unity API。
(目前没弄明白怎么用)


本帖被以下淘专辑推荐:


回复

使用道具 举报

2初来乍到
147/150
排名
31738
昨日变化
14

6

主题

12

帖子

147

积分

Rank: 2Rank: 2

UID
73054
好友
3
蛮牛币
228
威望
0
注册时间
2015-2-4
在线时间
23 小时
最后登录
2018-4-29

专栏作家

发表于 2018-4-29 18:32:51 | 显示全部楼层
这个很实用啊,收藏了

回复 支持 反对

使用道具 举报

排名
10208
昨日变化
129

12

主题

54

帖子

334

积分

Rank: 9Rank: 9Rank: 9

UID
215257
好友
2
蛮牛币
1276
威望
0
注册时间
2017-3-29
在线时间
162 小时
最后登录
2018-5-25

迈向小康

发表于 2018-5-2 09:24:44 | 显示全部楼层
感谢大师

回复

使用道具 举报

4四处流浪
427/500
排名
4885
昨日变化
26

1

主题

41

帖子

427

积分

Rank: 4

UID
245487
好友
0
蛮牛币
672
威望
0
注册时间
2017-9-22
在线时间
129 小时
最后登录
2018-5-25
发表于 2018-5-2 11:20:35 | 显示全部楼层
感激之情无以言表,只能说谢谢啦

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1378/1500
排名
3991
昨日变化
21

3

主题

809

帖子

1378

积分

Rank: 6Rank: 6Rank: 6

UID
246489
好友
0
蛮牛币
2283
威望
0
注册时间
2017-9-28
在线时间
244 小时
最后登录
2018-5-25

活力之星迈向小康

发表于 2018-5-2 11:39:24 | 显示全部楼层
海澜之嘉,你值得拥有
[发帖际遇]: ss_luck 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

5熟悉之中
701/1000
排名
4595
昨日变化
6

0

主题

48

帖子

701

积分

Rank: 5Rank: 5

UID
219633
好友
0
蛮牛币
724
威望
0
注册时间
2017-4-27
在线时间
379 小时
最后登录
2018-5-24
发表于 2018-5-2 11:52:09 | 显示全部楼层
感激之情无以言表,只能说谢谢啦

回复 支持 反对

使用道具 举报

4四处流浪
369/500
排名
7083
昨日变化
4

1

主题

66

帖子

369

积分

Rank: 4

UID
39740
好友
0
蛮牛币
609
威望
0
注册时间
2014-8-13
在线时间
145 小时
最后登录
2018-5-8
发表于 2018-5-2 19:50:24 | 显示全部楼层
太棒了dddd

回复

使用道具 举报

4四处流浪
369/500
排名
7083
昨日变化
4

1

主题

66

帖子

369

积分

Rank: 4

UID
39740
好友
0
蛮牛币
609
威望
0
注册时间
2014-8-13
在线时间
145 小时
最后登录
2018-5-8
发表于 2018-5-2 20:04:33 | 显示全部楼层
太棒了顶顶

回复

使用道具 举报

3

主题

8

帖子

21

积分

Rank: 1

UID
272276
好友
0
蛮牛币
10
威望
0
注册时间
2018-3-14
在线时间
11 小时
最后登录
2018-5-16
发表于 2018-5-2 21:25:42 | 显示全部楼层
学习了


回复

使用道具 举报

3偶尔光临
223/300
排名
8332
昨日变化
85

0

主题

57

帖子

223

积分

Rank: 3Rank: 3Rank: 3

UID
270137
好友
2
蛮牛币
518
威望
0
注册时间
2018-3-1
在线时间
42 小时
最后登录
2018-5-25
发表于 2018-5-3 08:17:32 | 显示全部楼层

回复

使用道具 举报

5熟悉之中
763/1000
排名
5744
昨日变化
1

0

主题

403

帖子

763

积分

Rank: 5Rank: 5

UID
146677
好友
9
蛮牛币
2571
威望
0
注册时间
2016-4-25
在线时间
152 小时
最后登录
2018-5-19
QQ
发表于 2018-5-3 08:55:46 | 显示全部楼层
这是个好东西,之前用过一点点没有去研究了,谢谢分享

回复 支持 反对

使用道具 举报

7日久生情
1873/5000
排名
1201
昨日变化
2

1

主题

571

帖子

1873

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
56496
好友
0
蛮牛币
5349
威望
0
注册时间
2014-11-19
在线时间
423 小时
最后登录
2018-5-17
发表于 2018-5-3 09:27:38 | 显示全部楼层
格式太乱了,阅读性太差了(网站)

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1055/1500
排名
2649
昨日变化
3

0

主题

219

帖子

1055

积分

Rank: 6Rank: 6Rank: 6

UID
168312
好友
0
蛮牛币
1834
威望
0
注册时间
2016-9-13
在线时间
356 小时
最后登录
2018-5-25
发表于 2018-5-3 10:23:59 | 显示全部楼层
Attributes-自带特性 路过收藏

回复 支持 反对

使用道具 举报

7日久生情
2290/5000
排名
487
昨日变化

6

主题

125

帖子

2290

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
84820
好友
17
蛮牛币
2089
威望
0
注册时间
2015-3-26
在线时间
773 小时
最后登录
2018-5-25
发表于 2018-5-3 11:19:18 | 显示全部楼层
才知道原来有这个多属性方法,整理果然好理解了

回复 支持 反对

使用道具 举报

4四处流浪
448/500
排名
5141
昨日变化
3

0

主题

30

帖子

448

积分

Rank: 4

UID
212220
好友
0
蛮牛币
849
威望
0
注册时间
2017-3-15
在线时间
178 小时
最后登录
2018-5-24
发表于 2018-5-3 12:36:19 | 显示全部楼层
很实用,学习一下

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表