Unity延时调用 时间等待工具

 

文章前言

在一个不是Mono的类中是无法使用Invoke  封装了一个私有MonoBehaviour类 改了一下方法  变成了现在这样  方便调用

 

结果

 一个非常简单的时间等待类  2个静态方法 

等待时间执行回调  WaitTimeTool.WaitTime(时间, 方法)  参数1:等待的时间   参数2:具体执行的方法    支持一个T类型的参数

关闭等待 WaitTimeTool.CancelWait(ref coroutine);  参数就是一个上面方法的返回值

下面是如何使用这个时间等待工具 我在一个空物体上面挂载了一个当前这个Test脚本   可以仔细看一下 打印结果的时间

 

下面是测试结果(注意看时间)    如果参数不够,或者没有返回值  可以自己多加修改一下即可


 

一. 代码

复制粘贴即可实现上图 Debug相同的结果

using System;
using System.Collections;
using UnityEngine;

namespace WG
{
    public class WaitTimeTool
    {
        private class WaitTimeMono : MonoBehaviour { }
        private static WaitTimeMono tool;

        static WaitTimeTool()
        {
            GameObject go = new GameObject("[WaitTimeTool]");
            GameObject.DontDestroyOnLoad(go);
            tool = go.AddComponent<WaitTimeMono>();
        }

        private static IEnumerator OpenCoroutine(float time, Action callback)
        {
            yield return new WaitForSeconds(time);
            if (callback != null) callback.Invoke();
        }

        private static IEnumerator OpenCoroutine<T>(float time, Action<T> callback, T value)
        {
            yield return new WaitForSeconds(time);
            if (callback != null) callback.Invoke(value);
        }

 
        /// <summary>等待 Time 开始执行 callback回调函数</summary>
        /// <param name="time">等待的时间</param>
        /// <param name="callback">回调函数</param>
        /// <returns></returns>
        public static Coroutine WaitTime(float time, Action callback)
        {
            return tool.StartCoroutine(OpenCoroutine(time, callback));
        }

        /// <summary>等待 Time 开始执行 callback回调函数</summary>
        /// <typeparam name="T">任意类型的一个参数</typeparam>
        /// <param name="time">等待的时间</param>
        /// <param name="callback">回调</param>
        /// <param name="value">参数值</param>
        /// <returns></returns>
        public static Coroutine WaitTime<T>(float time, Action<T> callback, T value)
        {
            return tool.StartCoroutine(OpenCoroutine(time, callback, value));
        }

        /// <summary>取消等待</summary>
        /// <param name="coroutine"></param>
        public static void CancelWait(ref Coroutine coroutine)
        {
            if (coroutine != null)
            {
                tool.StopCoroutine(coroutine);
                coroutine = null;
            }
        }

    }

}

总结

提示:可以的话,多来看看

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值