自己整理 协程的控制

新建了一个物体,挂载mono类,开启协程,不使用时销毁,较耗性能

/*******************************************************************************
* 版本声明:v1.0.0
* 类 名 称:CoroutinesController
* 创建日期:8/16/2019 11:33:21 AM
* 作者名称:末零
* 功能描述:协程
******************************************************************************/

using System;
using System.Collections;

using UnityEngine;

namespace LastZero
{
	/// <summary>
    /// 协程控制
    /// </summary>
	public class CoroutinesController
	{
        /// <summary>
        /// 延时
        /// </summary>
        /// <param name="action">方法</param>
        /// <param name="delaySeconds">延时</param>
        /// <param name="isStop">是否自动销毁</param>
        /// <returns>动态创建的物体</returns>
        public static GameObject DelayDo(Action action, float delaySeconds = 0, bool isStop = true)
        {
            GameObject obj = new GameObject("Coroutine");
            Coroutine cor = obj.AddComponent<Coroutine>();
            cor.delaySeconds = delaySeconds;
            cor.isStop = isStop;
            cor.DelayToInvokeDo(action);

            return obj;
        }

        /// <summary>
        /// 延时
        /// </summary>
        /// <param name="action">有参方法</param>
        /// <param name="param">参数</param>
        /// <param name="delaySeconds">延时</param>
        /// <param name="isStop">是否自动销毁</param>
        /// <returns>动态创建的物体</returns>
        public static GameObject DelayDo(Action<Action> action, Action param, float delaySeconds = 0, bool isStop = true)
        {
            GameObject obj = new GameObject("Coroutine");
            Coroutine cor = obj.AddComponent<Coroutine>();
            cor.delaySeconds = delaySeconds;
            cor.isStop = isStop;
            cor.DelayToInvokeDo(action, param);

            return obj;
        }

        public class Coroutine : MonoBehaviour
        {
            public float delaySeconds;
            public bool isStop;

            /// <summary>
            /// 延时
            /// </summary>
            public void DelayToInvokeDo(Action action)
            {
                StartCoroutine(DelayToInvokeDoAction(action));
            }

            /// <summary>
            /// 延时执行函数
            /// </summary>
            private IEnumerator DelayToInvokeDoAction(Action action)
            {
                yield return new WaitForSeconds(delaySeconds);
                action();

                if (isStop)
                    Destroy(gameObject);
            }

            /// <summary>
            /// 延时(有参,以传参action为例)
            /// </summary>
            public void DelayToInvokeDo(Action<Action> action, Action param)
            {
                StartCoroutine(DelayToInvokeDoAction(action, param));
            }

            /// <summary>
            /// 延时执行函数
            /// </summary>
            private IEnumerator DelayToInvokeDoAction(Action<Action> action, Action param)
            {
                yield return new WaitForSeconds(delaySeconds);
                action(param);

                if (isStop)
                    Destroy(gameObject);
            }

            /// <summary>
            /// 停止协程
            /// </summary>
            public void StopDelayCoroutine()
            {
                StopAllCoroutines();
            }
        }
    }
}

返回目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值