![](/img/trans.png)
[英]Why is part of my code not executed if I enable/disable Unity gameObject?
[英]Why my SelectionGrid is not a GameObject visible in Unity Editor?
我只想在某些選項之間創建一個排他的選擇。 而已!
但是使用Unity Editor似乎非常困難,因此我最終以編程方式創建了它:
static string[] options = new string[] { "Option 0", "Option 1", "Option 2" };
static Rect position = new Rect(0, 0, 320, 45);
int selected = 0;
void OnGUI()
{
selected = GUI.SelectionGrid(position, selected, options, options.Length, GUI.skin.toggle);
}
但是當我玩游戲時,SelectionGrid永遠不會出現在GameObject層次結構中。 SelectionGrid是GameObject嗎? 可以將其與具有有用的Canvas和錨點的新UI系統一起使用嗎? 還有其他解決方案嗎?
謝謝
Unity傳統GUI不會在層次結構上創建GameObject,也不會為每個GUI控件創建Game對象,它的概念與基於面向對象編程的通用UI有所不同。
僅出於理解的意義,將GUI視為狀態機,每個元素(GUI.Button或GUI.SelectionGrid)都是將通過單個函數調用進行實例化,定位和處理的組件,您不能將其作為獨立的對象進行操作,因為它更像是GUI本身的子機或狀態。
若要將GUI組件控制得更像對象,可以通過在單獨的MonoBehaviour類中編寫每個組件或組件集及其屬性的腳本,然后將其附加到空GameObjects上(這樣,您甚至可以對其進行預制以重新使用或以編程方式實例化)來進行處理。 例如:
public class MySelectionGridObject extends MonoBehaviour() {
public Rect orientation;
public int selectedItem;
OnGUI() {
selected = GUI.SelectionGrid(orientation, selected, ...);
}
}
這樣,您可以通過檢查器或在運行時通過實例化gameObject的組件來對其進行操作,例如:
MySelectionGrid grid = myGridObjectInstance.GetComponent<MySelectionGrid>();
我對您的個人建議是 : 如果您只是學習並且可以使用Unity 5,然后再使用NUI(此處是手動和課程 )系統,它將簡化Unity中的許多UI構造。 只要您無法將Unity升級到具有NUI支持的版本,或者正在使用基於舊版GUI的項目中工作,就可以使用舊版GUI(此處為手冊和參考 )。 獨立於您的選擇,以正確的方式學習文檔,以正確的方式閱讀文檔並嘗試在開始對項目進行大量編碼之前先了解其工作原理( 相信我,在不完全了解其邏輯的情況下使用GUI可能會給項目帶來巨大的性能問題,如果您在意識到之前創建了大量代碼,則將需要進行許多繁瑣的重構 。 Unity提供了大量視頻教程和扎實的文檔,可以通過做示例來學習API的基礎;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.