UnityGUI(五)GUI控件综合使用

cs 复制代码
public event UnityAction clickEvent;

protected override void StyleOffDraw()
 {
     if( GUI.Button(guiPos.Pos, content ) )
     {
         clickEvent?.Invoke();
     }
 }

protected override void StyleOnDraw()
 {
    if (GUI.Button(guiPos.Pos, content, style))
     {
         clickEvent?.Invoke();
     }
 }

Invoke() ≈ "执行委托里的所有方法"

clickEvent?.Invoke() ≈ "如果有方法在里面,就执行它们"

clickEvent.Invoke() + 手动判空 ≈ 同上,但麻烦且容易出错

cs 复制代码
public class CustomGUIToggleGroup : MonoBehaviour
{
    public CustomGUIToggle[] toggles;

    //记录上一次为true的 toggle
    private CustomGUIToggle frontTurTog;

    void Start()
    {
        if (toggles.Length == 0)
            return;

        //通过遍历 来为多个 多选框 添加 监听事件函数
        //在函数中做 处理 
        //当一个为true时 另外两个变成false
        for (int i = 0; i < toggles.Length; i++)
        {
            CustomGUIToggle toggle = toggles[i];
            toggle.changeValue += (value) =>
            {
                //当传入的 value  是ture时 需要把另外两个 
                //变成false
                if( value )
                {
                    //意味着另外两个要变成false
                    for (int j = 0; j < toggles.Length; j++)
                    {
                        //这里有闭包  toggle就是上一个函数中申明的变量
                        //改变了它的生命周期
                        if( toggles[j] != toggle )
                        {
                            toggles[j].isSel = false;
                        }
                    }
                    //记录上一次为true的toggle
                    frontTurTog = toggle;
                }
                //来判断 当前变成false的这个toggle是不是上一次为true
                //如果是 就不应该让它变成false
                else if( toggle == frontTurTog)
                {
                    //强制改成 true
                    toggle.isSel = true;
                }
            };
        }
    }

}
相关推荐
唐青枫16 小时前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m62520 小时前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户917215619021121 小时前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠2 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫4 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech4 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf6 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m6256 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
Artech6 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
LDR0067 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言