【Unity】8.4 擴展UnityGUI

分類:Unity、C#、VS2015 ide

建立日期:2016-04-27 函數

1、簡介

有不少種方法能夠補充和擴展 UnityGUI 以知足您的需求。你能夠混合和建立控件,而且能夠有多種方法來規定用戶 GUI 輸入的處理方法。 spa

2、複合控件

GUI 中可能會出現各類狀況,但老是同時出現兩種類型的控件。例如,你可能會使用水平滑塊建立經過角色控制的屏幕(Character Creation)。此時,全部這些滑塊都須要提供一個標籤 (Label) 來識別,這樣玩家才能知道它們是調節什麼的。這種狀況下,能夠將 GUI.Label() 的每一個調用與 GUI.HorizontalSlider() 的調用配對,或者建立一個同時包含標籤和滑塊的複合控件 (Compound Control) 。 code

例如: blog

using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour {

    private float mySlider = 1.0f;

    void OnGUI () {
        mySlider = LabelSlider (new Rect (10, 100, 100, 20), mySlider, 5.0f, "Label text here");
    }

    float LabelSlider (Rect screenRect, float sliderValue, float sliderMaxValue, string labelText) {
        GUI.Label (screenRect, labelText);

        // <- 將滑塊推至標籤末端
        screenRect.x += screenRect.width; 

        sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);
        return sliderValue;
    }
}

效果以下:get

image

在這個示例中,調用 LabelSlider() 並傳遞正確的參數將使標籤 (Label) 與水平滑動條 (Horizontal Slider) 配對。編寫複合控件 (Compound Controls) 時,請務必記住在函數結束時返回正確的值以使其交互。 string

3、靜態複合控件

使用靜態 (Static) 函數,你能夠爲本身建立完備的複合控件集。這樣你就不須要在同一腳本中使用函數時聲明此函數。 it

using UnityEngine;
using System.Collections;
public class CompoundControls : MonoBehaviour
{
public static float LabelSlider (Rect screenRect, float sliderValue, float sliderMaxValue, string labelText)
{
        GUI.Label (screenRect, labelText);
        //將滑塊推至標籤末端
        screenRect.x += screenRect.width; 
        sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);
        return sliderValue;
    }
}

經過將上述示例保存至 CompoundControls 腳本,只需簡單地鍵入 CompoundControls.LabelSlider() 並提供變量,就能夠從其餘任何腳本中調用 LabelSlider()。 io

4、複雜的複合控件

你還能夠將複合控件 (Compound Controls) 變得更具創造力。即讓它們按照你喜歡的方式排列和分組。下面的C#代碼示例建立一個可以重複使用的 RGB 滑塊: class

using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour {

    public Color myColor;

    void OnGUI () {
        myColor = RGBSlider (new Rect (10,10,200,10), myColor);
    }

    Color RGBSlider (Rect screenRect, Color rgb) {
        rgb.r = GUI.HorizontalSlider (screenRect, rgb.r, 0.0f, 1.0f);

        // <- 將下個控件向下移動一點以免重疊
        screenRect.y += 20; 
        rgb.g = GUI.HorizontalSlider (screenRect, rgb.g, 0.0f, 1.0f);

        // <- 將下個控件向下移動一點以免重疊
        screenRect.y += 20; 

        rgb.b = GUI.HorizontalSlider (screenRect, rgb.b, 0.0f, 1.0f);
        return rgb;
    }
}

效果以下:

image

爲了展現複合控件如何在其餘複合控件中使用,如今讓咱們在它們各自上方建立複合控件。爲此,咱們將像上面那樣建立一個新的 RGB 滑塊,但使用「標籤滑塊」(LabelSlider) 來實現。這樣就總有一個標籤使咱們能夠分辨出哪一個滑塊對應哪一種顏色:

using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour {

    public Color myColor;

    void OnGUI () {
        myColor = RGBSlider (new Rect (10,10,200,30), myColor);
    }

    Color RGBSlider (Rect screenRect, Color rgb) {
        rgb.r =  CompoundControls.LabelSlider (screenRect, rgb.r, 1.0f, "Red");

        // 將下個控件向下移動一點以免重疊
        screenRect.y += 20; 
        rgb.g = CompoundControls.LabelSlider (screenRect, rgb.g, 1.0f, "Green");

        // 將下個控件向下移動一點以免重疊
        screenRect.y += 20; 

        rgb.b = CompoundControls.LabelSlider (screenRect, rgb.b, 1.0f, "Blue");

        return rgb;
    }    
}

這段代碼的效果以下:

image
相關文章
相關標籤/搜索