Unity IMGUI 文件筆記

NRatel發表於2020-10-30

文件原文:https://docs.unity3d.com/cn/2020.1/Manual/GUIScriptingGuide.html

IMGUI :即時模式 GUI
用途:
    1、建立遊戲內除錯顯示和工具。(在每幀都會呼叫的 OnGUI() 中使用)
    2、為指令碼元件建立自定義檢視皮膚。
    3、建立新的編輯器視窗和工具以擴充套件 Unity 本身。

一、IMGUI 基礎知識

    GUI 控制元件宣告
    關鍵:Type (Position, Content)。
        1、Type:指 Control Type(控制元件型別),通常為 GUI 或 GUILayout 類中的函式。
        2、Position:所有 GUI 控制元件函式中的第一個引數。型別為 Rect(int, int, int, int),含義:最左側位置、最頂部位置、總寬度、總高度。均為螢幕空間下的畫素值(螢幕寬高:Screen.width、Screen.height)。
        3、Content:GUI 控制元件函式中的必要引數。型別為 string、Texture、GUIContent等(由具體控制元件決定),含義:要在控制元件上顯示的內容和tooltip。
    舉例:GUI.Button (new Rect (10,10,200,20), "Meet the flashing button")

二、GUI 控制元件型別

    1、GUI.Label            
    2、GUI.Button
    3、GUI.RepeatButton
    4、GUI.TextField
    5、GUI.TextArea
    6、GUI.Toggle
    7、GUI.Toolbar
    8、GUI.SelectionGrid
    9、GUI.HorizontalSlider
    10、GUI.VerticalSlider
    11、GUI.HorizontalScrollbar
    12、GUI.VerticalScrollbar
    13、GUI.BeginScrollView + GUI.EndScrollView
    14、GUI.Window
    ------------------------------
    15、GUI.changed                                     GUI 中執行了任何操作時返回true

三、使用 GUIStyle 自定義控制元件

    1、GUIStyle 旨在模仿 Web 瀏覽器的層疊樣式表 (CSS):分離內容和外觀。
    2、所有 GUI 控制元件函式都有可選的最後一個引數:用於顯示控制元件的 GUIStyle。若忽略,則會使用 Unity 預設的 GUIStyle。
    3、可將 GUIStyle 作為變數顯示在Inspector上進行編輯。
    4、GUIStyle 的屬性可以動態更改。

四、GUISkin

    1、GUISkin 是 GUIStyle 的集合,當有大量不同的 GUIStyle 可供使用時,可在單個 GUISkin 中定義這些樣式。
    2、建立 GUISkin: 選單欄中選擇 Assets > Create > GUI Skin。
    3、應用 GUISkin 至全域性:GUI.skin = customSkin。

五、IMGUI 固定佈局模式

    1、可以使用 GUI.BeginGroup + GUI.EndGroup 定義包含多個控制元件的螢幕區域。
    2、Group內的所有控制元件將根據Group的左上角而不是螢幕的左上角進行定位。
    3、Group可以巢狀。

六、IMGUI 自動佈局模式

    1、自動佈局模式在建立時不需要 Rect() 引數。控制元件將自動放置在包含控制元件的Area或螢幕的最左上角。
    2、可以使用 GUILayout.BeginArea + GUILayout.EndArea 定義有限空間的Area來包含多個控制元件。   
    3、Area中的可見控制元件會將寬度拉伸到該Area的整個長度。
    4、可以使用 GUILayout.BeginHorizontal() + GUILayout.EndHorizontal() 定義水平組。水平組內的所有控制元件都將始終採用水平佈局方式。
    5、可以使用 GUILayout.BeginVertical() + GUILayout.EndVertical() 定義垂直組。垂直組內的所有控制元件都將始終採用垂直佈局方式。
    6、垂直組和水平組可以巢狀使用,以實現複雜的排列需求。(重點在於自頂向下分解區域)。
    7、建立空間或組時,可以使用 GUILayoutOption 覆蓋某些自動佈局引數。 GUILayoutOption是以下函式的返回值:
        GUILayout.Width(float)              固定寬度
        GUILayout.MaxWidth(float)           最大寬度
        GUILayout.MinWidth(float)           最小寬度
        GUILayout.ExpandWidth(bool)         是否擴充套件寬度
        GUILayout.Height(float)             固定高度
        GUILayout.MaxHeight(float)          最大高度
        GUILayout.MinHeight(float)          最小高度
        GUILayout.ExpandHeight(bool)        是否擴充套件高度

*** 兩種佈局模式可以混用

七、擴充套件 IMGUI(類似製作預設,但是包裝在方法中)

    1、複合控制元件:即將(二)中的基本控制元件進行組合。同時顯示、封裝內部排列和互動。
    2、可將複合控制元件統一整理至一個靜態類中,方便各處複用。

相關文章