1. 程式人生 > >Unity GUI 通過某個GUI控制元件禁用另一個GUI控制元件

Unity GUI 通過某個GUI控制元件禁用另一個GUI控制元件

前言:

Unity的GUI系統相對UGUI系統而言,實在是不方便. 就如GUI控制元件的啟用和禁用,也沒有UGUI中的SetActive方法來得方便.

GUI中有個變數為enabled,可以控制"圖形使用者介面元件是否被啟用",有2個布林值true和false供選用.但是其針對所有的GUI控制元件同時生效.

問題來了:

如果想用gui控制元件A自由地"禁用"和"啟用"gui控制元件B,使用了GUI.enabled = false;之後,那麼這兩個控制元件都會被"禁用",無法再用A來"啟用"B了.

自己在做實驗練習時便遇到這個問題,不過實際上是自己想複雜想偏了.這個問題的解決跟Unity沒多大關係,也是跟演算法基礎知識相關.下面就用我遇到的實驗題目和解決的方法(C#語言)來闡述一下(同時也為了記錄一下,防止以後重蹈覆轍).

題目:

在Unity中, 用GUI圖形使用者介面系統實現:

介面上有一個Toggle控制元件和Button控制元件,使用Toggle控制元件來控制螢幕中Button控制元件的啟用和禁用。

解:

1.建立一個指令碼NewScript.cs,程式碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewScript : MonoBehaviour {
    bool isEnabled;

    void Start()
    {
        isEnabled = true;
    }

    void OnGUI()
    {
        isEnabled = GUI.Toggle(new Rect(Screen.width / 4, Screen.height / 8, Screen.width / 2, Screen.height / 4), isEnabled, "按鈕開關");
        GUI.enabled = isEnabled;        
        if (isEnabled)
        {
            GUI.Button(new Rect(Screen.width / 4, Screen.height * 2 / 3, Screen.width / 2, Screen.height / 4), "按鈕啟用");
        }
        else
        {
            GUI.Button(new Rect(Screen.width / 4, Screen.height * 2 / 3, Screen.width / 2, Screen.height / 4), "按鈕禁用");            
        }
        GUI.enabled = true;//重置,使Toggole等所有控制元件可用;另外由於此步晚於上述由Toggle控制元件控制的GUI.enabled值,所以仍舊可以控制Button的啟用和禁用.
    }

}
2.將建立好的指令碼掛載到攝相機上,執行即可.



(注意:GUI控制元件禁用時,呈"半透明"狀態)