新建了一个物体,挂载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();
}
}
}
}