微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Unity3D】三分钟了解unity3D中的协程Coroutine

前言

     Unity3D中的协程一直是我心目中最好用最优雅的部分,今天就花三分钟时间总结一下协程相关的知识,方便各位初学者快速入门

什么是协程?

     在unity3D中,协程可以理解为MonoBehavIoUr中另一个Update函数,但不同的是他可以分帧执行,就是说我们可以在第一帧执行一次,然后在第N帧再执行一次,最终完成整个函数

怎么用?

一般来说就两步
(1)一个返回值类型为IEnumerator的函数,相比一般函数,return要替换为yield return xxx。
(2)在该脚本的真正逻辑中调用这个函数调用方法是StartCoroutine(“方法名”)或者StartCoroutine( 方法名( [参数] ) )。

一段最简的携程代码如下:

	void Start ()
    {
        StartCoroutine(CoroutineFunction());
    }
	
    IEnumerator CoroutineFunction()
    {
    	Debug.Log("调用了协程");
    	yield return null;
    }

    当然这一段代码是没实际作用的,只是让初学者明白协程的使用方法。下面介绍应用场景时会有更有用的代码

为什么要用协程?一般应用场景是什么?

根据本人经验,协程的应用场景一般有三

1,定时器。有的代码不需要也不允许每帧执行一次,只需定时执行,这时就可以用协程来实现。

	void Start ()
    {
        StartCoroutine( TimeCounter() );
    }

    int count = 0;

    IEnumerator TimeCounter()
    {
        while (true)
        {
            yield return new WaitForSeconds(3);
            Debug.Log("第" + ++count + "个三秒");
        }
    }

2,分帧执行复杂逻辑

有的计算(比如大数的运算、图片模型的处理)一帧计算不完,不能放在update中;但放在start中又会导致程序卡死,这个时候就可以用协程来解决问题。
下面是一段程序实例,每帧只执行100次循环,最终逐步执行完整个代码

	void Start ()
    {
        StartCoroutine(ComplexCalculater() );
    }

    IEnumerator ComplexCalculater()
    {
        for(long i = 0;i < 10000000; i++)
        {
            if(i % 100 == 0)
                yield return null;
            Debug.Log(i);
        }
    }

想让一段逻辑按照你想要的顺序执行

这个例子我想了一会,觉得玩过《和平精英》的读者很容易理解:玩家死之后不能立刻消失,要把自己的装备盒放到地上再升天~
这个时候如果用普通的程序逻辑,你要时刻检测是不是把盒子放到地上了,是不是动画播放完了,是不是该归西了。。。很麻烦,而协程只需几句代码就能完成,伪码如下:

	void Start ()
    {
        if(health == 0)
            StartCoroutine( Die() );
    }

    IEnumerator Die()
    {
        把装备盒放到地上();
        yield return null;
        挥挥手();
        yield return null;
        升天();
        yield return null;
        销毁对象();
        yield return null;
    }

注意事项

怎么样,协程是不是很方便?但是协程虽好,也不能乱用。每个协程函数至少要执行两帧才能完成,性能肯定略差于普通函数,定时器的话用Invoke、InvokeRepeat也能完成,具体取舍还是要看项目需要哦。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐