文章前言
在一个不是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;
}
}
}
}
总结
提示:可以的话,多来看看