Unity編輯器拓展(二) Property Drawers

官方文檔 PropertyDrawers
Unity編輯器拓展(一)
Unity編輯器拓展(二)
Unity編輯器拓展(三)

繪制屬性 Property Drawers

繪制屬性可用于腳本上的屬性缩滨,在 Inspector 窗口中自定義某些控件的外觀凳干,或者控制特定的可序列化類的外觀。

繪制屬性有兩種用途:1.為可序列化類的每個實例自定義 GUI。2.為腳本成員屬性自定義 GUI肄满。

為可序列化類的每個實例自定義 GUI

如果腳本中屬性是自定義類,在 Inspector 中是不會顯示的质涛,如果需要顯示稠歉,我們可用 Serializable 修飾。

示例1:

using System; // for Serializable

public enum IngredientUnit { Spoon, Cup, Bowl, Piece }

[Serializable]
public class Ingredient {
    public string name;
    public int amount = 1;
    public IngredientUnit unit;
}

public class GameRecipe : MonoBehaviour {
    public Ingredient potionResult;
    public Ingredient[] potionIngredients;

}

正確顯示如下圖所示:


我們可以使用 CustomPropertyDrawer 來自定義我們需要的顯示效果汇陆。如示例2:

[CustomPropertyDrawer(typeof(Ingredient))]
public class IngredientDrawer : PropertyDrawer {
    
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {

        EditorGUI.BeginProperty(position, label, property); // 開始繪制屬性

        var indent = EditorGUI.indentLevel; // 用來緩存修改之前的縮進值
        EditorGUI.indentLevel = 0;          // 修改縮進為 0怒炸,不縮進

        // 獲取屬性前值 label, 就是顯示在此屬性前面的那個名稱 label
        position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); 
        // 定義此屬性的子框體區(qū)域
        var amountRect = new Rect(position.x, position.y, 30, position.height);
        var unitRect = new Rect(position.x + 35, position.y, 50, position.height);
        var nameRect = new Rect(position.x + 90, position.y, position.width - 90, position.height);

        // 繪制子屬性:PropertyField參數(shù)依次是: 框體位置,對應屬性毡代,顯示的label
        // 如果你要顯示一個label阅羹,第三個參數(shù): new GUIContent("xxx")
        EditorGUI.PropertyField(amountRect, property.FindPropertyRelative("amount"), GUIContent.none);
        EditorGUI.PropertyField(unitRect, property.FindPropertyRelative("unit"), GUIContent.none);
        EditorGUI.PropertyField(nameRect, property.FindPropertyRelative("name"), GUIContent.none);

        EditorGUI.indentLevel = indent;   // 恢復縮進

        EditorGUI.EndProperty();          // 完成繪制
    }
}

顯示效果圖:

為腳本成員屬性自定義 GUI

使用 Property Attributes 來給腳本的成員屬性自定義GUI。你可以使用內(nèi)建的和自定義的教寂。

內(nèi)建屬性有:

  • Range() 將一個值指定在一定的范圍內(nèi)捏鱼,在Inspector面板中為其添加滑塊
  • Multiline() 為一個string指定多行
  • Header() 為屬性添加屬性標題
  • Tooltip() 為屬性添加提示語
  • Space() 添加指定行距
  • ContextMenu() 為腳本添加菜單到右上角工具按鈕
  • TextArea() 添加TextArea

示例3:

public class GameRecipe : MonoBehaviour {

    public Ingredient potionResult;
    public Ingredient[] potionIngredients;

    [Header("Nick")]
    public string nickName;
    [Multiline(3)]
    public string description;
    [Space(20)]
    [Range(0f, 10f), Tooltip("this is weight")]
    public float weight;
    [TextArea]
    public string information;

    [ContextMenu("Show Infomation")]
    void ShowInfo() {
        Debug.Log(information);
    }
}

效果如圖:

自定義 PropertyAttribute:1.派生 PropertyAttribute 并定義此類。2. 在使用 CustomPropertyDrawer 實現(xiàn)繪制酪耕。
這種實現(xiàn)和之前的示例2類似就不展示示例了导梆。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市迂烁,隨后出現(xiàn)的幾起案子看尼,更是在濱河造成了極大的恐慌,老刑警劉巖盟步,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藏斩,死亡現(xiàn)場離奇詭異,居然都是意外死亡却盘,警方通過查閱死者的電腦和手機狰域,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谷炸,“玉大人北专,你說我怎么就攤上這事⊙福” “怎么了拓颓?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長描孟。 經(jīng)常有香客問我驶睦,道長砰左,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任场航,我火速辦了婚禮缠导,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溉痢。我一直安慰自己僻造,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布孩饼。 她就那樣靜靜地躺著髓削,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镀娶。 梳的紋絲不亂的頭發(fā)上立膛,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音梯码,去河邊找鬼宝泵。 笑死,一個胖子當著我的面吹牛轩娶,可吹牛的內(nèi)容都是我干的儿奶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罢坝,長吁一口氣:“原來是場噩夢啊……” “哼廓握!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘁酿,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤隙券,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闹司,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娱仔,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年游桩,在試婚紗的時候發(fā)現(xiàn)自己被綠了牲迫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡借卧,死狀恐怖盹憎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铐刘,我是刑警寧澤陪每,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響檩禾,放射性物質(zhì)發(fā)生泄漏挂签。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一盼产、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戏售,春花似錦、人聲如沸蜈项。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽直颅。三九已至,卻和暖如春功偿,著一層夾襖步出監(jiān)牢的瞬間械荷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工痹兜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颤诀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓遗淳,卻偏偏與公主長得像心傀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恐锦,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1一铅、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,982評論 3 119
  • 思路: 1.廣告頁加載思路潘飘。廣告頁的內(nèi)容要實時顯示,在無網(wǎng)絡狀態(tài)或者網(wǎng)速緩慢的情況下不能延遲加載卜录,或者等到首頁出現(xiàn)...
    流年啊奈我何閱讀 1,197評論 0 1
  • 最后一次見你是昨天艰毒,距離今天才短短一天,可我覺得已經(jīng)過了好久好久柑土。你我之間仿佛隔著大片大片的海绊汹,遙不可及。 多害怕...
    湯水閱讀 223評論 0 0
  • ◆★◆鈦酸鋰真密度測試儀狐榔,鋅汞材料真密度測試儀获雕,納米碳酸鈣真密度測試儀典鸡,鎳鈷酸鋰真密度測試儀,氧化鈉真密度測試儀◆...
    63999ee42c15閱讀 254評論 0 0
  • [話筒]【曾艷芬安利日歷の1114期】 懷了孩子,方知我得把全身最精粹的一切貢獻給這個新的生命嫁乘。在低等動物,新生命...
    曾艷芬微光站閱讀 194評論 0 0