分類:Unity、C#、VS2015 ide
建立日期:2016-04-27 函數
有不少種方法能夠補充和擴展 UnityGUI 以知足您的需求。你能夠混合和建立控件,而且能夠有多種方法來規定用戶 GUI 輸入的處理方法。 spa
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
在這個示例中,調用 LabelSlider() 並傳遞正確的參數將使標籤 (Label) 與水平滑動條 (Horizontal Slider) 配對。編寫複合控件 (Compound Controls) 時,請務必記住在函數結束時返回正確的值以使其交互。 string
使用靜態 (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
你還能夠將複合控件 (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; } }
效果以下:
爲了展現複合控件如何在其餘複合控件中使用,如今讓咱們在它們各自上方建立複合控件。爲此,咱們將像上面那樣建立一個新的 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; } }
這段代碼的效果以下: