Unity內(nèi)置屬性[Attribute]是一種類(lèi)似修飾功能的標(biāo)簽??梢詫?duì)OnSceneGUI,InspectorGUI,MenuGUI,WindowGUI等實(shí)現(xiàn)各種各樣的GUI擴(kuò)展。用戶(hù)只要添加上特性標(biāo)簽,就能夠自由的使用這些擴(kuò)展功能。下面列出一些常用的標(biāo)簽:
HideInInspector
隱藏屬性在Inspector面板上的顯示。在繼承了MonoBehaviour的類(lèi)中,用public修飾的變量如果可以被序列化,那么就會(huì)在Inspector中顯示,使用HideInInspector可以讓他不顯示。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
[HideInInspector]
public string heroName;
}
Header
Header用來(lái)給屬性添加標(biāo)題文字。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
[Header("Hero current blood")]
public float blood;
}
Tooltip
Tooltip用來(lái)顯示屬性標(biāo)簽的提示文字。當(dāng)鼠標(biāo)移動(dòng)到該屬性字段上的時(shí)候會(huì)出現(xiàn)相應(yīng)的提示。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
[Tooltip("Hero current blood")]
public float blood;
}
Space
Space,空間占位,可以調(diào)整兩個(gè)屬性塊之間的間隔距離??梢詡鲄?shù),表示間距大小,單位是像素。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
public float heart;
[Space()]
public float blood;
[Space(20)]
public float money;
}
Range
Range使得用戶(hù)可以使用Slider對(duì)類(lèi)似于int,float,long,double這一類(lèi)的數(shù)值類(lèi)型進(jìn)行改變。
using UnityEngine;
public class PuzzleHero : 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;
}
Mulitline/TextArea
Textfile默認(rèn)情況下是只有一行的,但同時(shí)也能變成復(fù)數(shù)行顯示的TextArea。Multiline和TextArea功能大致上相同,不過(guò)Multiline有著[無(wú)法依據(jù)寬度自動(dòng)換行]和[不能使用scroll表示]的限制。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
[Multiline(5)]
public string multiline;
[TextArea(3, 5)]
public string textArea;
}
ColorUsage
顏色拾取器。第一個(gè)參數(shù)控制是否顯示透明通道,第二個(gè)參數(shù)控制是否使用HDR。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
[ColorUsage(true)]
public Color color1;
[ColorUsage(true,true)]
public Color color2;
}
SerializeField
Unity 默認(rèn)不會(huì)序列化私有變量,如果想強(qiáng)制序列化一個(gè)私有變量,那么可以用SerializeField修飾。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
[SerializeField]
private string str;
}
ExecuteInEditMode
在 Unity 中繼承MonoBehaviour的腳本,并不是一直都會(huì)執(zhí)行的。Unity默認(rèn)只有在Play Mode下,才會(huì)運(yùn)行場(chǎng)景里GameObject下掛載的腳本。如果想在編輯狀態(tài)下也執(zhí)行該腳本可以用ExecuteInEditMode修飾,也可以用ExecuteAlways修飾。
using UnityEngine;
[ExecuteInEditMode]
public class PuzzleHero : MonoBehaviour
{
private void Awake()
{
Debug.Log("Excute In Edit Model");
}
}
HelpURL
在class類(lèi)上進(jìn)行幫助文檔的鏈接的設(shè)定,設(shè)置之后可以點(diǎn)擊腳本右上角的問(wèn)號(hào)按鈕可以調(diào)到對(duì)應(yīng)的網(wǎng)頁(yè)。
using UnityEngine;
[HelpURL("https://www.xrlmall.top")]
public class PuzzleHero : MonoBehaviour
{
}
AddComponentMenu
可以在UnityEditor的Component的Menu中增加自定義的項(xiàng)目。菜單可以設(shè)置多級(jí),使用斜線(xiàn)/分隔即可。在Hierarchy中選中GameObject的時(shí)候,點(diǎn)擊該菜單項(xiàng),就可以在GameObject上追加該Component,或者在Inspector面板點(diǎn)擊“Add Component”按鈕追加。
using UnityEngine;
[AddComponentMenu("Custom/PuzzleHero")]
public class PuzzleHero : MonoBehaviour
{
}
ContextMenu
可以在Inspector的ContextMenu中增加選項(xiàng),執(zhí)行某個(gè)操作。
using UnityEngine;
public class PuzzleHero : MonoBehaviour
{
[ContextMenu("SaveFile")]
void DoSomething()
{
Debug.Log("save level data to file");
}
}
DisallowMultipleComponent
對(duì)一個(gè)MonoBehaviour的子類(lèi)使用這個(gè)屬性,那么在同一個(gè)GameObject上面,最多只能添加一個(gè)該Class的實(shí)例。
using UnityEngine;
[DisallowMultipleComponent]
public class PuzzleHero : MonoBehaviour
{
}
嘗試添加多個(gè)的時(shí)候,會(huì)出現(xiàn)下面的提示。
RequireComponent
在Class上使用,添加對(duì)另一個(gè)Component的依賴(lài)。當(dāng)該Class被添加到一個(gè)GameObject上的時(shí)候,如果這個(gè)GameObject不含有依賴(lài)的Component,會(huì)自動(dòng)添加該Component。且該Componet不可被移除。
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class PuzzleHero : MonoBehaviour
{
}
自動(dòng)添加Rigidbody,并且不能被移除文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-405533.html
MenuItem
快捷鍵打開(kāi)資源路徑文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405533.html
public class EditorTool
{
//Alt+R打開(kāi)資源路徑
[MenuItem("HSJ/快捷方式/打開(kāi)UI預(yù)制路徑 &R")]
static void OpenResourcesUIPanel()
{
Selection.activeObject = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Resources/Prefab/Panel/LoginPanel.prefab");
}
//Alt+S打開(kāi)腳本路徑
[MenuItem("HSJ/快捷方式/打開(kāi)Panel腳本路徑 &S")]
static void OpenScript()
{
Selection.activeObject = AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/Scripts/MessageBoxPanel.cs");
}
//Alt+S打開(kāi)指定文件夾路徑
[MenuItem("HSJ/快捷方式/打開(kāi)工程目錄 &O")]
private static void OpenProjectFolder()
{
EditorUtility.RevealInFinder(Application.dataPath);
}
}
到了這里,關(guān)于Unity 編輯器擴(kuò)展之 Attribute的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!