Unity內(nèi)置屬性[Attribute]是一種類似修飾功能的標簽官辈。可以對OnSceneGUI遍坟,InspectorGUI拳亿,MenuGUI,WindowGUI等實現(xiàn)各種各樣的GUI擴展愿伴。在這一章里將舉例介紹一些常用的內(nèi)置屬性肺魁,并使用它們繼續(xù)進行界面的自由定制。
[Range(min, max)] //限定float, int 取值范圍隔节。
public class NewBehaviourScript : MonoBehaviour
{
[Range(1, 10)]
public int num1;
[Range(1, 10)]
public float num2;
[Range(1, 10)]
public long num3;
[Range(1, 10)]
public double num4;
}
[Multiline(lines)] //行數(shù)鹅经。
[TextArea(minLines, maxLines)] //文本域。
public class NewBehaviourScript : MonoBehaviour
{
[Multiline(5)]
public string multiline;
[TextArea(3, 5)]
public string textArea;
}
收攏Inspector時效果
展開Inspector時效果
[ContextMenuItem("string")] //右鍵點擊Inspector中的對應名字怎诫,快捷出現(xiàn)可選的函數(shù)執(zhí)行瘾晃。
public class NewBehaviourScript : MonoBehaviour
{
[ContextMenuItem("Random", "RandomNumber")]
[ContextMenuItem("Reset", "ResetNumber")]
public int number;
void RandomNumber()
{
number = Random.Range(0, 100);
}
void ResetNumber()
{
number = 0;
}
}
[ContextMenu("string")] //與上面類似,但是要點擊齒輪圖標或在腳本名上點右鍵幻妓。
public class NewBehaviourScript : MonoBehaviour
{
[Range(0, 10)]
public int number;
[ContextMenu("RandomNumber")]
void RandomNumber()
{
number = Random.Range(0, 100);
}
[ContextMenu("ResetNumber")]
void ResetNumber()
{
number = 0;
}
}
[ColorUsage(bool)] //調(diào)用顏色選項框蹦误。
public class NewBehaviourScript : MonoBehaviour
{
public Color color1;
[ColorUsage(false)]
public Color color2;
[ColorUsage(true, true, 0, 8, 0.125f, 3)]
public Color color3;
}
[Header("string")] //增加標題欄。
public class NewBehaviourScript : MonoBehaviour
{
[Header("Player Settings")]
public Player player;
[Serializable]
public class Player
{
public string name;
[Range(1, 100)]
public int hp;
}
[Header("Game Settings")]
public Color background;
}
[Space(height)] //行與行之間添加空白行肉津。
public class NewBehaviourScript : MonoBehaviour
{
public string str1;
[Space(20)]
public string str2;
}
[Tooltip("string")] //顯示鼠標懸停所在函數(shù)的說明强胰。
public class NewBehaviourScript : MonoBehaviour
{
[Tooltip("說明內(nèi)容")]
public long tooltip;
}
[HideInInspector] //不顯示在inspector但是被序列化。即使是public修飾的變量妹沙,也不被顯示偶洋,不可以被外部類調(diào)用。
[System.NonSerialized] //不被序列化距糖,也不顯示玄窝。
[SerializeField] //將private修飾的變量序列化。
[RequireComponent("componentName")] //自動掛載某組件悍引。
[DisallowMultipleComponent] //添加在Class上方哆料,當有別的腳本繼承該Class,別的腳本不能被掛載在object上吗铐。
[AddComponentMenu("path")] //在Menu上顯示該腳本东亦。
[ExecuteInEditMode] //一些需要在run才能賦值的變量,直接在編輯器中被賦值静盅。
[SelectionBase] //在Scene View中單擊選擇它的子物體時醒陆,會首先選中它自己跷车。點2次子物體陆盘,才會選中要選的子物體趋艘。把該腳本的物體作為base的效果坎藐。
如圖父子結構价说,在Scene View中操作:
單擊Sphere → 選中Sphere
單擊Cube → 選中Cube
單擊Capsule → 選中 Cube
其他與Editor無關的屬性列舉
[RPC] [SyncVar] [Command] 網(wǎng)絡相關
[ImageEffectOpaque] ImageEffectTransformsToLDR
[DllImport("DLL Name")] 導入動態(tài)鏈接庫
最后上腳本棵磷,綜合了上述的實例運用歹啼。
using UnityEngine;
[SelectionBase] //在Scene View中點選它的子物體時玄渗,會首先選中它。點2次才會選中要選的子物體狸眼。把該腳本的物體作為base的效果藤树。
[AddComponentMenu("Scripts/Player")] //把本腳本添加到菜單中
[DisallowMultipleComponent] //繼承該Class的腳本不能被掛載
[RequireComponent(typeof(Animator))] //自動添加組件
[ExecuteInEditMode] //一些需要在run才能賦值的變量,直接在編輯器中被賦值拓萌。
public class Player : MonoBehaviour
{
[Header("Player")]
public string playerName;
[Multiline(2)][Tooltip("The titles")]
public string nikeName;
[TextArea(2, 2)]
public string address;
[Space(20)]
public Color color1; //RGBA
[ColorUsage(false)]
public Color color2; //RGB
[ColorUsage(true, true, 0, 8, 0.125f, 3)] //RGBA 增加亮度岁钓、曝光度
public Color color3;
[Space(20)]
[Range(0,100)]
public float health;
[Range(10, 20)]
public int damage;
[Header("Pet")]
public string pet1Name;
[ContextMenuItem("Random", "RandomNumber")]
[ContextMenuItem("Reset", "ResetNumber")]
public int pet1Level;
void RandomNumber()
{
pet1Level = Random.Range(1, 20);
}
void ResetNumber()
{
pet1Level = 1;
}
[Range(1, 100)]
public int pet1Damage;
[ContextMenu("RandomNumber")]
void RandomDamage()
{
pet1Damage = Random.Range(1, 100);
}
[ContextMenu("ResetNumber")]
void ResetDamage()
{
pet1Damage = 1;
}
[HideInInspector]
public int id;
[System.NonSerialized]
public int age;
[SerializeField]
Animator animator;
void Awake()
{
animator = GetComponent<Animator>();
}
}
總體效果