Unity3d开发(十二)使用Menu.SetCheck更改菜单勾选状态

width="150" height="210" frameborder="0" scrolling="no" src="http://widget.weibo.com/relationship/bulkfollow.php?language=zh_cn&uids=2080045857&wide=1&color=FFFFFF,FFFFFF,0082CB,666666&showtitle=0&showinfo=1&sense=0&verified=1&count=1&refer=http%3A%2F%2Fwww.himigame.com%2Fandroid-game%2F1521.html&dpc=1" style="font-size: 14px; font-weight: bold; border-width: 0px; margin: 0px; padding: 0px; font-family: arial, helvetica, clean, sans-serif; line-height: 16px;">


文章作者:松阳

本文出自 阿修罗道,禁止用于商业用途,转载请注明出处。  

原文链接:http://blog.csdn.net/fansongy/article/details/51261609







在编辑器中总有一些改变状态量的需求,例如:是否输出日志。通常的做法是在代码中更改,不过这需要重新编译,而且也对非程序人员不友好 。更灵活的做法是使用本地变量存储,不过这写起来比较麻烦。最近我发现Unity有个接口可以干净的解决这个问题,我使用的是Unity5.3版本。

需求 & 实现效果

策划同学跑过来说:日志输出太多,有点卡,能关了么 。所以我就给做了一个菜单扩展,效果如下:

Unity3d开发(十二)使用Menu.SetCheck更改菜单勾选状态_第1张图片Unity3d开发(十二)使用Menu.SetCheck更改菜单勾选状态_第2张图片

当勾选状态时,输出日志;勾掉时,不输出日志。

代码实现

实现这个效果很简单,不超过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。否则会报错,这个问题查了我半天,大家小心

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它... 

你可能感兴趣的:(Unity3d,Unity3d,开发杂谈)