Unity Attributes 自帶特性
AddComponentMenu
AddComponentMenu屬性允許您將指令碼放置在“元件”選單中的任何位置,而不僅僅是“元件 - >指令碼”選單。
您可以使用它來更好地組織“元件”選單,這樣可以在新增指令碼時改進工作流程。重要提示:您需要重新啟動。
- componentOrder 元件選單中的元件順序(低於頂部)。
- AddComponentMenu 在“元件”選單中新增一個專案。
using UnityEngine;
[AddComponentMenu("Transform/Follow Transform")]
public class FollowTransform : MonoBehaviour
{
}
效果如下
AssemblyIsEditorAssembly
裝配級屬性。具有此屬性的程式集中的任何類將被視為編輯器類。
建構函式
AssemblyIsEditorAssembly
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 將功能新增到元件的上下文選單。
效果如下
ContextMenuItemAttribute
使用此屬性將上下文選單新增到呼叫命名方法的欄位。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
[ContextMenuItem("Reset", "ResetBiography")]
[Multiline(8)]
public string playerBiography = "";
void ResetBiography()
{
playerBiography = "";
}
}
效果如下
CreateAssetMenu
fileName
新建立的此類例項使用的預設檔名。(建立檔案必須以 .asset 結尾)
menuName
此型別顯示的名稱顯示在“資產/建立”選單中。
order
選單項在資產/建立選單中的位置。
using UnityEngine;
[CreateAssetMenu(fileName = "自定義資源.asset", menuName = "選單/子項0")]
public class CreateAsset : ScriptableObject
{
public string Name = "自定義資源";
public Vector3[] Pos = new Vector3[10];
}
效果如下
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;
}
效果如下
DisallowMultipleComponent
防止將相同型別(或子型別)的MonoBehaviour多次新增到GameObject。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[DisallowMultipleComponent]
public class Disallow : MonoBehaviour
{
}
效果如下
ExecuteInEditMode
使指令碼的所有例項在編輯模式下執行。
預設情況下,MonoBehaviours只能在播放模式下執行。
通過新增此屬性,MonoBehaviour的任何例項將在編輯器不處於播放模式時執行其回撥函式。
這些功能不會像播放模式一樣被呼叫。
更新僅在場景中的某些內容更改時才呼叫。當遊戲檢視接收到一個事件時,OnGUI被呼叫。OnRenderObject和其他渲染回撥函式在場景檢視或遊戲檢視的每次重繪時都被呼叫。
另請參見:runInEditMode。
using UnityEngine;
[ExecuteInEditMode]
public class PrintAwake : MonoBehaviour
{
void Awake()
{
Debug.Log("Editor causes this Awake");
}
void Update()
{
Debug.Log("Editor causes this Update");
}
}
效果如下
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");
}
}
效果如下
HeaderAttribute
在Inspector 中顯示屬性對應屬性的註釋
使用此
PropertyAttribute在檢查器中的某些欄位上方新增標題。
標題是使用DecoratorDrawer完成的。
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;
}
效果如下
HelpURLAttribute
幫助圖示對應跳轉的URL(注意此類需要繼承MonoBehaviour,不繼承在2017測試跳轉地址無效)
using UnityEngine;
using UnityEditor;
[HelpURL("http://www.jianshu.com/u/84e03bc5c4a6")]
public class MyComponent:MonoBehaviour
{
}
效果如下
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;
}
效果如下
ImageEffectAllowedInSceneView
具有此屬性的任何影象效果可以渲染到場景檢視相機中。
如果您希望將影象效果應用於場景檢視相機,則會新增此屬性。效果將應用於相同的位置,並且具有與相機效果相同的值。(5.4開始新加的特性,目前不知道怎麼用)
MultilineAttribute
用於使字串值的屬性顯示在多行文字區域中。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Example1 : MonoBehaviour
{
[MultilineAttribute(10)]
public string str = "";
}
效果如下
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類。
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;
}
效果如下
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);
}
}
效果如下
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場景載入和遊戲執行後");
}
}
效果如下
SelectionBaseAttribute
將此屬性新增到指令碼類以將其GameObject標記為用於場景檢視挑選的選擇基礎物件。
在Unity Scene View中,單擊選擇物件時,Unity將嘗試找出最適合您選擇的物件。如果單擊作為預製體一部分的物件,則選擇預製根的根,因為預製根被視為選擇庫。您也可以使其他物件也被視為選擇庫。您需要使用SelectionBase屬性建立一個指令碼類,然後您需要將該指令碼新增到GameObject中。
using UnityEngine;
[SelectionBase]
public class PlayerScript : MonoBehaviour
{
}
效果如下
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);
}
}
效果如下
SharedBetweenAnimatorsAttribute
SharedBetweenAnimatorsAttribute是一個屬性,指定該StateMachineBehaviour應僅例項化一次,並在所有Animator例項之間共享。
此屬性減少每個控制器例項的記憶體佔用。
程式設計師可以選擇哪個StateMachineBehaviour可以使用此屬性。
請注意,如果您的StateMachineBehaviour更改一些成員變數,它將影響使用它的所有其他Animator例項。
另請參見:StateMachineBehaviour類。
using UnityEngine;
[SharedBetweenAnimators]
public class AttackBehaviour : StateMachineBehaviour
{
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log("OnStateEnter");
}
}
SpaceAttribute
使用此
PropertyAttribute在檢查器中新增一些間距。
間距使用DecoratorDrawer完成。
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;
}
效果如下
TextAreaAttribute
使用高度靈活和可滾動的文字區域編輯字串的屬性。
您可以指定TextArea的最小和最大行,並且欄位將根據文字的大小進行擴充套件。如果文字大於可用區域,則會顯示一個滾動條。
using UnityEngine;
public class TextAreaExample : MonoBehaviour
{
[TextArea()]
public string MyTextArea;
}
效果如下
TooltipAttribute
在“檢查器”視窗中指定一個欄位的工具提示。
using UnityEngine;
using System.Collections;
public class ExampleClass3 : MonoBehaviour
{
[Tooltip("Health 值 從 0 到 100.")]
public int health = 0;
}
效果如下
UnityAPICompatibilityVersionAttribute
宣告一個程式集與特定的Unity API相容(API明智)。由內部工具使用,以避免處理程式集,以確定程式集是否可能使用舊的Unity API。
(目前沒弄明白怎麼用)
相關文章
- Unity-Built-In-Attributes 內建屬性UnityUI
- Mozilla和Unity合作將Unity引擎帶到WebUnityWeb
- unity 自動尋路Unity
- Database Triggers and event attributes--Event AttributesDatabase
- jQuery attributes(上)jQuery
- 使用h5新特性,輕鬆監聽任何App自帶返回鍵H5APP
- Database Triggers and event attributes--Event Attributes【Blog 搬家】Database
- Oracle ASM Attributes DirectoryOracleASM
- Declaring Attributes of FunctionsFunction
- HTML 23 - Form AttributesHTMLORM
- HTML 25 - Input AttributesHTML
- Oracle ASM Disk Group AttributesOracleASM
- Playing with __attributes__ (三)
- Playing with __attributes__ (二)
- QWebEngineView去除自帶CookieWebViewCookie
- oracle自帶指令碼Oracle指令碼
- 停掉oracle自帶jobOracle
- Unity記憶體最佳化(來自uwa)Unity記憶體
- C#中Attributes的用法C#
- 帶你總結ES6的特性
- Java 14 可能帶來什麼新特性?Java
- mysqlbackup 重建帶有gtid特性的slaveMySql
- GCC 6 即將帶來的新特性GC
- Python list of class attributes - PythonPython
- .NET 5 帶來的新特性 [MemberNotNull] 與 [MemberNotNullWhen]Null
- Xcode 8帶來的新特性和坑XCode
- expdp和impdp自動使用resumable特性
- 微軟自帶病毒怎麼掃描_win10掃描自帶病毒的方法微軟Win10
- win10自帶的遊戲在哪_win10如何開啟自帶小遊戲Win10遊戲
- win10自帶遊戲被隱藏了 win10找不到自帶遊戲Win10遊戲
- hp-unix 自帶磁帶機備份資料
- Chrome 自帶開發者工具筆記Chrome筆記
- Django自帶後臺使用配置Django
- Django自帶後臺管理配置Django
- Python自帶的函式Python函式
- VS自帶工具:dumpbin的使用
- Unity + ZXing + 螢幕旋轉自動自適應 + 自定義掃碼介面Unity
- Keil中搭建自動化單元測試框架Unity框架Unity