admin管理员组

文章数量:1565353

Unity 协程插件More Effective Coroutines Pro 小记

Unity 中协程应用还是非常频繁的,但是一旦大量使用必然导致高GC出现。More Effective Coroutines Pro 插件据官方说可以大量减少GC出现,提高运行速度,那么就我使用一段时间后理一下相关的API,效率图如下,来自官方的说明文档


图一

图二

如何启动一个普通的MEC协程

下面展示一个不同的协程方式

//Unity自带
private IEnumerator UnityCoroutine()
{
 yield return new WaitForSeconds(1);
 Debug.Log("完成UnityCoroutine协程");
}
//调用
private void test1()
{
  StartCoroutine(UnityCoroutine());
}
// MEC
private IEnumerator<float> MECCoroutine()
{
   yield return Timing.WaitForSeconds(1);
    Debug.Log("完成UnityCoroutine协程");
}
//调用
private void test1()
{
  Timing.RunCoroutine(MECCoroutine());
}

进阶一点之我常用的功能API

平时我自己能用到的,协程真是我这样的菜鸟必备技能啊

//MEC等待执行完成
//在test中
IEnumerator _test()
{
//等待1秒后
yield return Timing.WaitForSeconds(1);
//先执行_test1直到完成
Timing.WaitUntilDone(Timing.RunCoroutine(_test1());
//再执行_test2直到完成
Timing.WaitUntilDone(Timing.RunCoroutine(_test2());
//执行_test3暂停
Timing.PauseCoroutines(_test3);
//执行_test3继续运行
Timing.ResumeCoroutines(_test3);
//标记执行
Timing.RunCoroutine(_test4(), "1");
Timing.RunCoroutine(_test5(), "1");
Timing.RunCoroutine(_test6(), "2");
Timing.RunCoroutine(_test7(), "2");
//干掉所有标记为1的,暂停什么的都一样操作
Timing.KillAllCoroutines("1"));
//执行单一操作,比如用户对着UI按钮一顿狂暴点击输出,但是在运行中只执行一次
Timing.RunCoroutineSingleton(_test8(), "handle", SingletonBehavior.Abort);
//点击马上干掉前一个,重新触发一个
Timing.RunCoroutineSingleton(_test9(), "handle", SingletonBehavior.Overwrite);
//点击马上加一个在队列中,上一个执行完才会执行下一个
Timing.RunCoroutineSingleton(_test10(), "handle", SingletonBehavior.Wait);
//先来几个变量
GameObject obj1,obj2,obj3;
private bool test11()
{
	return true;
}
//设定生命周期,跟随GameObject 销毁,test11方法执行完成后干掉协程
private bool test12()
{
Timing.RunCoroutine(_Coroutine().CancelWith(obj1, obj2).CancelWith(obj3).CancelWith(test11));
}
//官方案例,还没没用过感觉很不错的,突显链式本色
Timing.RunCoroutine(_TurnRight().Append(_TurnLeft()));
Timing.RunCoroutine(_MoveToFinalPosition(obj1).Append(delegate { Destroy(obj1); }));
}

总结

菜鸟一枚,以上是我的一点点心得,基本上都是官方说明上的案例,有不对的地方望指正,欢迎讨论!官方地址稍后再放,来不及了要下班了!

本文标签: 学习笔记插件UnityEffectivepro