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;
                }
            };
        }
    }

}
相关推荐
这是程序猿10 分钟前
Java线程池深度剖析:源码原理、核心参数、任务调度与生产调优实战
java·开发语言·python
quantdash_cc22 分钟前
从数据采集到策略消费,股票日内行情管道应该怎么设计?
开发语言·python·数据分析·量化交易·股票数据·quantdash
郝学胜-神的一滴31 分钟前
C++20模板元编程 01:从零吃透模板核心底层逻辑
开发语言·c++·vscode·程序人生·开源
可乐鸡翅yeah_1 小时前
HLS流媒体首屏起播慢深度优化,从分片、索引、播放器全链路调优
开发语言·javascript·ecmascript·m3u8·m3u8在线
luj_17681 小时前
生物体如何应对功能击穿?
c语言·开发语言·c++·经验分享·算法
luj_17681 小时前
击穿分析五大关键步骤
开发语言·网络·c++·经验分享·算法
wuyk5551 小时前
从零吃透 MQTT 通信|第 11 章 MQTT 项目调试验证、性能优化、常见疑难问题、OTA 升级基础
c语言·开发语言·stm32·学习·性能优化
海盗12341 小时前
微软技术日报 2026-09-14:Rust 升为微软一级语言,云业务重组为智能体与基础设施
开发语言·microsoft·rust
名字还没想好☜1 小时前
Python 的 __call__ 实战:让实例像函数一样被调用,做带状态计数器、缓存器与可配置策略
开发语言·后端·python·缓存·编程语言
skywalk81632 小时前
第 23 轮方向确定:保护表通用化替代轮。先深入探查剩余保护表依赖场景和任务 6 的四阶段路径,再写任务书。9.14
开发语言·人工智能·光明