1. 程式人生 > >Unity3d開發(十二)使用Menu.SetCheck更改選單勾選狀態

Unity3d開發(十二)使用Menu.SetCheck更改選單勾選狀態

在編輯器中總有一些改變狀態量的需求,例如:是否輸出日誌。通常的做法是在程式碼中更改,不過這需要重新編譯,而且也對非程式人員不友好 。更靈活的做法是使用本地變數儲存,不過這寫起來比較麻煩。最近我發現Unity有個介面可以乾淨的解決這個問題,我使用的是Unity5.3版本。

需求 & 實現效果

策劃同學跑過來說:日誌輸出太多,有點卡,能關了麼 。所以我就給做了一個選單擴充套件,效果如下:

當勾選狀態時,輸出日誌;勾掉時,不輸出日誌。

程式碼實現

實現這個效果很簡單,不超過10行程式碼哦。

using UnityEngine;
using System.Collections;
using UnityEditor;

public class LogSwitchEditor : MonoBehaviour 
{
    #region Public Attributes
    const string logOutPath = "Tools/輸出日誌";
    #endregion

    [MenuItem(logOutPath)]
    public static void MenuLogOut()
    {
        bool flag = Menu.GetChecked(logOutPath);
        LogSwitch.CurrentLogSwitch = !flag;
        Menu.SetChecked(logOutPath, !flag);
    }

    [MenuItem(logOutPath,true)]
    public static bool MenuLogOutCheck()
    {
        Menu.SetChecked(logOutPath, LogSwitch.CurrentLogSwitch);
        return true;
    }
}

簡單解釋下,logOutPath是目錄路徑。MenuLogOutCheck用來保證狀態資料與選單顯示一致。業務函式就一句設定switch真假,大家可以自己做相應的邏輯。

另外,由於MenuLogOutCheck會先於點選執行,所以有這個函式就可以保證,先呼叫Menu.SetChecked後呼叫Menu.GetChecked。否則會報錯,這個問題查了我半天,大家小心

如果你覺得這篇文章對你有幫助,可以順手點個,不但不會喜當爹,還能讓更多人能看到它...