使用Unitask执行分支结构事件

目录

前提:

布局:

代码

说明:

前提:

        全部功能的实现都基于Unitask插件的帮助,如无此插件,可在我的分享中下载使用。

引入命名空间 using Cysharp.Threading.Tasks;

布局:

代码:

    public List<Button> BranchButtons = new ();//分支按钮
    public List<Button> TestButtons = new();//实验按钮
    private int idx;//获取点击任务的索引
    private string btnName;//当前索引下的任务的按钮名称

    void Start()
    {
        //定义方法
        Func <UniTaskVoid> Branch = async () =>
        {
            //---任务1---
            var list1 = new List<UniTask>();//局部的任务列表
            BranchButtons.ForEach(x =>
            {
                list1.Add(x.OnClickAsync());//添加按钮的点击事件
            });
            idx = await UniTask.WhenAny(list1);//获取点击按钮的索引
            btnName = BranchButtons[idx].name;//通过索引返回名称
            Debug.Log($"idx={idx},name={btnName}");
            await DoThings();//分支按钮的事件
            await TestButtons.First(x=>x.name=="结束分支").OnClickAsync();//跳出分支后结束的按钮点击
            Debug.Log("over");

            //---任务2---
            //可用方法1:再创建一个局部变量的列表存储任务,亦可实现
            //var list2 = new List<UniTask>();//局部的任务列表
            //BranchButtons.ForEach(x =>
            //{
            //    list2.Add(x.OnClickAsync());//添加按钮的点击事件
            //});
            //idx = await UniTask.WhenAny(list2);//获取点击按钮的索引
            
            //可用方法2:将list1清空后,再重新存储一次
            list1.Clear();
            BranchButtons.ForEach(x =>
            {
                list1.Add(x.OnClickAsync());//添加按钮的点击事件
            });
            idx = await UniTask.WhenAny(list1);//获取点击按钮的索引
            btnName = BranchButtons[idx].name;//通过索引返回名称
            Debug.Log($"idx={idx},name={btnName}");
            await DoThings();//分支按钮的事件
            await TestButtons.First(x => x.name == "结束分支").OnClickAsync();//跳出分支后结束的按钮点击
            Debug.Log("over");
        };
        Branch();
    }
    
    /// <summary>
    /// 分支的主要事件
    /// </summary>
    /// <returns></returns>
    async UniTask DoThings()
    {
        switch (btnName)
        {
            case "左分支":
                await TestButtons.First(x => x.name == "左分支-1").OnClickAsync();
                Debug.Log("左分支-1");
                await TestButtons.First(x => x.name == "左分支-2").OnClickAsync();
                Debug.Log("左分支-2");
                break;

            case "右分支":
                await TestButtons.First(x => x.name == "右分支-1").OnClickAsync();
                Debug.Log("右分支-1");
                await TestButtons.First(x => x.name == "右分支-2").OnClickAsync();
                Debug.Log("右分支-2");
                break;
        }
    }

说明:

        目前通过异步实现两支分支的事件分布执行,执行结束后可以重新选择分支继续执行,如果需要添加分支,在主方法中添加switch的情况及按钮的添加即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值