unity当中协程的使用
目录
- 1.技术概述
- 2.技术详述
- 1.协程实现逐字打印的动画效果
- 2.协程实现过场动画中的进度条滚动
- 3.遇到的问题以及解决方法
- 3.总结
- 4.参考博客
1.技术概述
unity的协程(Coroutine)只是在c#的基础上做了一层封装,其实yield是C#的关键字。
unity协程是一个能够暂停协程执行,暂停后立即返回主函数,执行主函数剩余的部分,直到中断指令完成后,从中断指令的下一行继续执行协程剩余的函数。
函数体全部执行完成,协程结束。
由于中断指令的出现,使得可以将一个函数分割到多个帧里去执行。
什么情况下使用到该技术:主函数在后台加载,前台可以实现一些小功能,类似过场加载的进度条,以及逐字打印文本内容。
学习该技术的原因:将原来需要用异步实现的代码通过同步的方法实现,类似CPU的分时运行,给协程一定的CPU时间来运行。
2.技术详述
协程的实现需要在Unity中继承MonoBehaviour并使用C#的迭代器IEnumrator,格式如下所示:
IEnumrator 函数名(形参表) //最多只能有一个形参
{
yield return xxx; //恢复执行条件
//方法体
}
在IEnumerator类型的方法中写入需要执行的操作,遇到yield后会暂时挂起,等到yield return后的条件满足才继续执行yield语句后面的内容。
开启协程需要使用StartCoroutine()方法。
调用StopCoroutine()方法中止协程执行。
生命周期图:

图片来源于此篇博客:点此跳转
下面将会用两个我项目中的例子说明协程的使用
1.协程实现逐字打印的动画效果
// 协程逐字打印文本的效果,用协程产生延时的效果
IEnumerator TypeText(string str,float interval)
{
int i = 0;
while (i <= str.Length)
{
dialogTextUI.text = str.Substring(0, i++); //设置对话框的文本内容
yield return new WaitForSeconds(interval); //协程返回
}
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
StopAllCoroutines();
dialogTextUI.text = allText;
}
}
在此段代码中,通过协程,在每一帧当中逐渐增加文本的内容长度,从而实现逐字打印文本的效果。
2.协程实现过场动画中的进度条滚动
/// <summary>
/// 协程实现进度条上的图片的滚动
/// </summary>
IEnumerator RunSlider()
{
int i = 0;
while(i < 250)
{
sliderImage.transform.localEulerAngles = new Vector3(0, 0, sliderImage.transform.rotation.z + 100f);
yield return new WaitForSeconds(0.04f);
}
StopAllCoroutines();
}
因为协程延时返回,所以可以实现在一定时间内旋转进度条一定的角度,且是匀速进行。
3.遇到的问题以及解决方法
协程的代码量其实不长,协程的难点主要是如何想到要用协程使用。
在项目中,刚开始我想给进度条的滚动添加动画,通过每次调用动画实现滚动的效果,但是动画制作起来繁琐,且无法复用,后来再搜索的时候接触到了协程技术,这才有了用协程实现进度条的滚动效果。
总的来说,当碰到一些需要异步加载的时候,比如后台在进行过场的加载,这时候前台不能什么都不显示,这样子会让用户误以为电脑卡住了,这时候就可以通过协程写点进度条,更有甚者可以写个小游戏,让过场动画不再那么无聊。
3.总结
学好协程,可以拓宽我们的思路,在碰到问题的时候从其他角度思考来解决。
4.参考博客
相关推荐
Unity协程(Coroutine)原理深入剖析
NULL 博文链接:https://dsqiu.iteye.com/blog/2029701
Unity协程(Coroutine)原理深入剖析再续
NULL 博文链接:https://dsqiu.iteye.com/blog/2049743
Unity协程(Coroutine)原理深入剖析.pdf
Unity协程(Coroutine)原理深入剖析.pdf Unity协程(Coroutine)原理深入剖析.pdf Unity协程(Coroutine)原理深入剖析.pdf Unity协程(Coroutine)原理深入剖析.pdf Unity协程(Coroutine)原理深入剖析.pdf
C#迭代器及Unity协程实例解析
主要介绍了C#迭代器及Unity协程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Unity基础知识——进程、线程、协程入门
前言 我不知道大家在学习这段的时候是什么样的,我在学习协程线程的时候是非常烦躁的。一方面本身就看不懂那种复杂的官方定义,一方面又必须要学明白。在十分不乐意的翻了好多资料后,最后还是回归官方定义的怀抱233333.今天在这我就简单的给大家入个门。 一、基本概念 首先在学习之前,我们要弄懂什么是进程,什么是线程,什么是携程。 简单来说,进程就是你能在任务管理器里看到的内容。包括 这些都是进程。而每一个进程可能还会有一个或多个线程。线程可以简单地理解为一个程序能同时做的不同的事情。比如一个同时收发的服务器等等。 而协程,在Unity中是一个存在于主线程中的东西。在Unity的主线程中的Update



