Unity编辑器扩展基础五、GUI

一、静态属性

1、颜色

改变背景颜色:GUI.backgroundColor

改变内容颜色: GUI.contentColor

改变内容改变内容和背景颜色: GUI.color

        //改变背景颜色
        GUI.backgroundColor = Color.yellow;
        GUI.Button(new Rect(0, 0, 200, 30), "改变背景颜色");
        GUI.backgroundColor = Color.white;
        GUI.Button(new Rect(0, m_interval, 200, 30), "改变背景颜色");

        //改变内容颜色
        GUI.contentColor = Color.yellow;
        GUI.Button(new Rect(0, m_interval * 2, 200, 30), "改变内容颜色");
        GUI.contentColor = Color.white;
        GUI.Button(new Rect(0, m_interval * 3, 200, 30), "改变内容颜色");

        //改变内容和背景颜色
        GUI.color = Color.yellow;
        GUI.Button(new Rect(0, m_interval * 4, 200, 30), "改变内容和背景颜色");
        GUI.color = Color.white;
        GUI.Button(new Rect(0, m_interval * 5, 200, 30), "改变内容和背景颜色");
image.gif
image
image.gif

2、文本输入框:GUI.TextField

GUI.changed:如果有输入控件的值发生改变,就会返回true。

        stringToEdit = GUI.TextField(new Rect(0, m_interval * 6, 200, 20), stringToEdit, 25);
        if (GUI.changed)
            Debug.Log("GUI.TextField 内容有修改");
image.gif

3、 GUI的激活状态:GUI.enabled

GUI.enabled控制之后的GUI的激活状态,未激活的GUI不能接收事件。

toggleGroup = GUI.Toggle(new Rect(0, m_interval * 7, 200, 20), toggleGroup, "ToggleGroup");
        GUI.enabled = toggleGroup;
        if (GUI.Button(new Rect(0, m_interval * 8, 200, 30), "测试toggleGroup的按钮1"))
        {
            Debug.Log("点击了button1");
        }
        if (GUI.Button(new Rect(0, m_interval * 9, 200, 30), "测试toggleGroup的按钮2"))
        {
            Debug.Log("点击了button2");
        }
image.gif
image
image.gif

4、GUI.depth

5、GUI.matrix

6、GUI.skin

二、静态方法

1、GUI.Label

 GUI.Label(new Rect(210, 10, 100, 20), "Hello World!");
image.gif

2、 GUI.Box

  GUI.Box(new Rect(210, 50, 50, 50), "A BOX");
image.gif

3、GUI.Button

if (GUI.Button(new Rect(210, 110, 70, 30), "A button"))
            Debug.Log("点击了按钮!");
image.gif

4、 GUI.BeginGroup

        m_beginGroupRect = new Rect(0, 0, Screen.width / 2, Screen.height / 2);
        //BeginGroup 可以用来管理UI,UGUI的Panel,组里面的UI元素是相对于组创建的。
        GUI.BeginGroup(m_beginGroupRect);
        GUI.Box(new Rect(m_beginGroupRect), "自适应的 BeginGroup 测试!");
        GUI.EndGroup();
image.gif

5、GUI.BeginScrollView

     //滑动区域
        scrollPosition = GUI.BeginScrollView(new Rect(10, 10, 200, 200), scrollPosition, new Rect(0, 0, 220, 200));
        GUI.Button(new Rect(0, 0, 100, 20), "Top-left");
        GUI.Button(new Rect(120, 0, 100, 20), "Top-right");
        GUI.Button(new Rect(0, 180, 100, 20), "Bottom-left");
        GUI.Button(new Rect(120, 180, 100, 20), "Bottom-right");
        GUI.EndScrollView();
image.gif
image
image.gif

6、 GUI.DrawTexture、GUI.DrawTextureWithTexCoords

        //画一个图片
        if (aTexture)
        {
            GUI.DrawTexture(new Rect(10, 110, 110, 110), aTexture, ScaleMode.StretchToFill, true, 10.0F);
            GUI.DrawTextureWithTexCoords(new Rect(10, 240, 110, 110), aTexture, new Rect(10, 240, 110, 110), false);
        }
image.gif

7、 GUI.SetNextControlName

为下一个控件设置控件名称。

8、 GUI.FocusControl

通过控件名称设置聚焦,设置聚焦时参数为控件名称,取消聚焦时参数为null。(EditorGUILayout.TextField 控件如果被聚焦,返回的值修改之后,不会马上刷新,需要取消聚焦才能看到刷新之后的值。)

   GUI.SetNextControlName("MyTextField");
        username = GUI.TextField(new Rect(10, 410, 100, 20), username);
        pwd = GUI.TextField(new Rect(10, 440, 100, 20), pwd);
        if (GUI.Button(new Rect(10, 470, 80, 20), "设置聚焦"))
            GUI.FocusControl("MyTextField");

        if (GUI.Button(new Rect(10, 500, 80, 20), "取消聚焦"))
            GUI.FocusControl(null);//取消聚焦
image.gif

9、GUI.HorizontalSlider、GUI.VerticalSlider、GUI.HorizontalScrollbar、GUI.VerticalScrollbar

        hSliderValue = GUI.HorizontalSlider(new Rect(210, 150, 100, 30), hSliderValue, 0.0F, 10.0F);
        vSliderValue = GUI.VerticalSlider(new Rect(210, 170, 100, 30), vSliderValue, 10.0F, 0.0F);
        hSValue = GUI.HorizontalScrollbar(new Rect(210, 210, 100, 30), hSValue, 1.0F, 0.0F, 10.0F);
        vSValue = GUI.VerticalScrollbar(new Rect(210, 230, 100, 30), vSValue, 1.0F, 10.0F, 0.0F);
image.gif

10、GUI.GetNameOfFocusedControl

获取当前聚焦的控件名称,如果没有聚焦或者没有控件命名返回空字符串。

11、GUI.Window、 GUI.FocusWindow、GUI.DragWindow

GUI.BringWindowToBack、GUI.BringWindowToFront

 //GUI.depth、GUI.BringWindowToBack、GUI.BringWindowToFront都可以改变窗口的层级
    //GUI.BringWindowToBack  GUI.BringWindowToFront
    private Rect windowRect = new Rect(20, 20, 120, 120);
    private Rect windowRect2 = new Rect(80, 20, 120, 120);
    private Rect windowRect3 = new Rect(150, 20, 120, 120);

    // GUI.depth 
    int guiDepth1 = 0;
    int guiDepth2 = 0;

    //
    string m_focusedControlName = "";
    void OnGUI()
    {
        windowRect = GUI.Window(0, windowRect, DoMyWindow1, "第一个窗口");
        windowRect2 = GUI.Window(1, windowRect2, DoMyWindow2, "第二个窗口");
        windowRect3 = GUI.Window(2, windowRect3, DoMyWindow3, "第三个窗口");
    }
    void DoMyWindow1(int windowID)
    {
       // GUI.depth = guiDepth1;
        if (GUI.Button(new Rect(10, 20, 100, 20), "Window1"))
        {
            //GUI.BringWindowToBack(1);//将窗口id为1的窗口设置到最后
            //guiDepth1 = 1;
            //guiDepth2 = 0;
            //GUI.BringWindowToFront(1);//将窗口id为1的窗口设置到最前
            GUI.FocusWindow(1);  //聚焦到id为1的窗口
        }
        //DragWindow 可拖动的窗口
        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }
    void DoMyWindow2(int windowID)
    {
        //GUI.depth = guiDepth2;
        if (GUI.Button(new Rect(10, 20, 100, 20), "Window2"))
        {
            //GUI.BringWindowToBack(2);
            //guiDepth1 = 0;
            //guiDepth2 = 1;
            GUI.BringWindowToFront(2);
        }

        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }
    void DoMyWindow3(int windowID)
    {
       // GUI.depth = guiDepth2;
        if (GUI.Button(new Rect(10, 20, 100, 20), "Window3"))
        {
            //GUI.BringWindowToBack(0);
            //guiDepth1 = 0;
            //guiDepth2 = 1;
            GUI.BringWindowToFront(0);

        }
        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }
image.gif
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容