Unity常用[xxx]用法 特性

UnityEngine命名空間下

標記字段

[Space]

可以與上面形成一個空隙,可以帶參數[Space(30)]

[Header(“XXX”)]

在Inspector面板上給定義的字段的上一行加段描述,可以將屬性隔離開,形成分組的感覺

[Tooltip(“XXX”)]

在Inspector面板上鼠標移上定義的字段彈出描述

[Range(min, max)]

限制數值變量的取值范圍并以滑動條顯示在Inspector中

[HideInInspector]

使屬性在Inspector中隱藏,但是還是可序列化,想賦值可以通過寫程序賦值序列化

[System.Serializable]

使自定義的類能進行序列化,即當做一個public成員的時候可以在Inspector顯示

[FormerlySerializedAs(“XXX”)]

該屬性可以令變量以另外的名稱進行序列化,并且在變量自身修改名稱的時候,不會丟失之前的序列化的值

[ContextMenuItem(“顯示的方法名”,”方法”)]

標記字段,給字段右鍵菜單段添加一個方法

[MultilineAttribute]

在string類型上使用,可以在Editor上輸入多行文字

[TextAreaAttribute]

該屬性可以把string在Inspector上的編輯區變成一個TextArea

[NotConvertedAttribute]

在變量上使用,可以指定該變量在build的時候,不要轉換為目標平臺的類型

[NotFlashValidatedAttribute]

在變量上使用,在Flash平臺build的時候,對該變量不進行類型檢查。Unity5.0中已經移除了這個屬性

[NotRenamedAttribute]

禁止對變量和方法進行重命名。Unity5.0中已經移除了這個屬性

標記類/方法

[RequireComponent(typeof(ClassName))]

將被標記的類拖到(或者AddComponent)GameObject上時,自動再給你加上“ClassName”這個類

[ExecuteInEditMode]

在編輯界面讓你的功能(類)(非Play模式)起作用

[AddComponentMenu(“XXX/XX/XXX”)]

讓Component菜單下出現你自定義的類,位置是“XXX/XX/XXX”

[CustomEditor(typeof(ClassName))]

聲明一個Class為自定義Editor的Class,可以制作一個自定義編輯器

[MenuItem(“一級菜單名/二級菜單名 _全局快捷鍵”]

標記函數:在菜單中出現選項欄,執行對應功能。注:對應的函數必須是static

[MenuItem(“一級菜單名/二級菜單名”,false,1)]

第三個參數決定菜單的優先級。間隔超過10,就另開一組,用下劃線分隔

第二個參數是true則是是給該菜單項添加驗證,分別標記兩個函數,true標記的函數作為false 標記的函數能否啟用并執行的驗證,菜單名,優先級要相同

GameObject菜單與Hierarchy面板右鍵菜單一樣,優先級在10左右。

Assets菜單與project面板右鍵菜單一樣

菜單名 + _快捷鍵,給菜單指定單一快捷鍵

菜單名 + %快捷鍵,給菜單指定組合快捷鍵 %-Ctrl #-Shift &-Alt

[ContextMenu(“菜單選項名”)] / [MenuItem(“CONTEXT/組建名/菜單名”)]

標記函數:在Inspector面板,右擊包含這條標記的腳本,出現“菜單名”的菜單選項。

注:對應的函數必須是static

標記的函數可以添加 MenuCommand cmd 參數,cmd.context轉換為當前組建類型后操作

[CreateAssetMenu(menuName = “MySubMenue/Create XXX “)]

標記類,可以給project面板下的Creat 菜單下新建一個自定義子菜單,用于新建自定義資源

[AssemblyIsEditor]

匯編級屬性,使用該屬性的Class會被認為是EditorClass。具體用法不明

[DisallowMultipleComponent]

對一個MonoBehaviour的子類使用這個屬性,那么在同一個GameObject上面,最多只能添加一個該Class的實例。

嘗試添加多個的時候,會出現提示

[ImageEffectOpaque]

在OnRenderImage上使用,可以讓渲染順序在非透明物體之后,透明物體之前

[ImageEffectTransformsToLDR]

渲染從從HDR變為LDR 具體使用方法不明

[RuntimeInitializeOnLoadMethodAttribute]

此屬性僅在Unity5上可用。在游戲啟動時,會自動調用添加了該屬性的方法

[SelectionBaseAttribute]

當一個GameObject含有使用了該屬性的Component的時候,在SceneView中選擇該GameObject,Hierarchy上面會自動選中該GameObject的Parent

[SharedBetweenAnimatorsAttribute]

用于StateMachineBehaviour上,不同的Animator將共享這一個StateMachineBehaviour的實例,可以減少內存占用

[UnityAPICompatibilityVersionAttribute]

用來聲明API的版本兼容性

[CallbackOrderAttribute]

定義Callback的順序

[UnityAPICompatibilityVersionAttribute]

用來聲明API的版本兼容性

[CanEditMultipleObjects]

Editor同時編輯多個Component的功能

[CustomPreview(typeof(GameObject))]

將一個class標記為指定類型的自定義預覽

[CustomPropertyDrawer]

標記自定義PropertyDrawer時候使用。當自己創建一個PropertyDrawer或者DecoratorDrawer的時候,使用該屬性來標記

[DrawGizmo (GizmoType.Selected | GizmoType.Active)]

以在Scene視圖中顯示自定義的Gizmo,Gizmo的圖片需要放入Assets/Gizmo目錄中

[InitializeOnLoad]

在Class上使用,可以在Unity啟動的時候,運行Editor腳本。需要該Class擁有靜態的構造函數。

[InitializeOnLoadMethod]

在Method上使用,是InitializeOnLoad的Method版本。Method必須是static的

[PreferenceItem (“My Preferences”)]

使用該屬性可以定制Unity的Preference界面

[OnOpenAssetAttribute()]

在打開一個Asset后被調用

[PostProcessBuildAttribute()]

該屬性是在build完成后,被調用的callback。同時具有多個的時候,可以指定先后順序

[PostProcessSceneAttribute()]

使用該屬性的函數,在scene被build之前,會被調用。具體使用方法和PostProcessBuildAttribute類似

System命名空間下

[SerializeField]

在Inspector版面中顯示非public屬性,并且序列化

[NonSerialized]

在Inspector版面中隱藏public屬性,不執行序列化

UnityEditor命名空間下

[CallbackOrder]

? 所有帶order(順序)回調屬性的特性基類。

[CanEditMultipleObjects]

? 使自定義編輯器支持同編輯多個對象,一般配合CustomEditor使用類。

[CustomEditor]

? 要自定義編輯器就要加這個特性。

[CustomPreview ]

? 添加自定義類型的preview在監視板。

[CustomPropertyDrawer]

? 自定義屬性渲染,如果要自定義PropertyDrawer或 DecoratorDrawer,要加上這個特性

[DrawGizmo]

? 自定義Gizmo渲染方法任何組件,方法可以定義在任意類而且不用添加到組件,但必須為靜態。

[InitializeOnLoad]

? 當Unity工程裝載時,會自動調用一個類來初始化,這個類必須有靜態構造函數。

[InitializeOnLoadMethod]

? 同上,只不過這個是調用靜方法。

[MenuItem]

? 添加菜單項,必須是靜態方法。第二個參數若為true,則會先判斷改方法是否返回true,若是,則可以使用,若為false,這按鈕是不可用的(灰色的)。更多用法看官網教程這里。

[PreferenceItem]

? 給Preference窗口添加菜單項,調用的也是靜態方法。

[Callbacks.DidReloadScripts]

? 腳本更改或者刪減時會回調一次 標記的函數

NetWork

[Command]

由客戶端發起,運行在服務器上,方法名必須以Cmd開頭

出于安全考慮,命令只能從玩家控制的物體上發出

[ClientRpc]/[RPC]

由服務器發起,運行在客戶端上,方法名必須以Rpc開頭

可以從任何帶有NetworkIdentity并被派生出來的物體上發出

[SyncVar]

同步變量,從服務器同步到客戶端上

同步變量的狀態在OnStartClient()之前就被應用到物體上了

同步變量可以是基礎類型,如整數,字符串和浮點數。也可以是Unity內置數據類型,如Vector3和用戶自定義的結構體,但是對結構體類型的同步變量,如果只有幾個字段的數值有變化,整個結構體都會被發送。每個NetworkBehaviour腳本可以有最多32個同步變量,包括同步列表

[SyncVar(hook = “Function”)]

同步變量還可以指定函數,使用hook,客戶端調用

Function函數有一個 同步變量類型 的參數,參數就是該同步變量的最新值

public void OnChangeHealth(int newHealth){}

[Server]

只執行在服務器端但是不能標識一些特殊函數(可以在這里調用Rpc類函數)

[ServerCallback]

只執行在服務器端,并使一些特殊函數(eg:Update)不報錯

若在此函數中改變了帶有[SyncVar]的變量,客戶端不同步

使用ServerCallback時,將Update中的重要語句摘出來寫入Rpc函數中并調用

[Client]

[ClientCallback]

只執行在客戶端

[NetworkSettings(channel = 0, sendInterval = 0.333f)]

對組件進行配置

[ClientRpc(channel = 1)]

對方法進行配置,這里僅以 ClientRpc 為例

默認情況下,命令是通過0號通道(默認的可靠傳輸通道)進行傳輸的

channel 即通信通道, sendInterval 為發送間隔時間

帶有NetworkIdentity的組件在運行之前不能是隱藏的,否則同步會受影響,在代碼Start函數中置為SetActive = false,或者因為網絡問題一開始隱藏的物體在后續同步中都沒有問題

u3d萌新QQ群844087555 歡迎進來灌水=。=

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容