Unity协程那些事(一)

版权申明:

  • 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明
  • 更多学习资源请加QQ:1517069595获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)

本系列索引:

在这里插入图片描述

引言

  • 上图中,游戏主角释放技能,攻击到一个小怪后,小怪死亡播放一个死亡溶解效果(由一段C#脚本控制)。Unity就会在每一帧执行动画控制脚本,同时Unity又需要控制主角打死小怪后下一个动作,比如移动、释放其他技能等。我们可以得知,Unity在游戏运行的每一帧中,都需要同时控制多个程序脚本运行,并且还需要让它们并行执行,那么这样一种在一个程序段中让程序并行执行的过程,我们就叫它协程

什么是协程

在这里插入图片描述- 既然我们要使用协程,那么首先我们就要了解什么是协程。协程的英文叫做Coroutine,它的概念存在于很多编程语言中,比如游戏开发常用的Lua,Ruby等

  • 由于Unity3D是一种单线程的编程语言,所谓的单线程并不是指Unity整个引擎只开了一条线程,而是指Unity整个引擎有多条渲染线程,但是对于调用我们编写的游戏脚本的情况,Unity是统一放在一条主线程进行调度的
  • 因此我们可以认为,对于我们写的游戏脚本,Unity是单线程的,所以需要使用一种机制,来模拟多线程的情况,即采用协程的机制。
  • 我们需要明确的一点是:协程不是进程,不是线程,它的执行过程更类似于一个子例程
    • 以上图代码为例,CountCoroutine函数就是一个协程并由Unity调用
    • 作为协程的函数有一个特点,即没有返回值。IEnumerator只是协程的一个固定用法
    • 我们通过StartCoroutine来启动这个协程,Unity会在游戏的每一帧中定时调用我们所写的CountCoroutine协程

上面的代码可能对初学者有些抽象,下面我们就打开Unity,通过实际操作进行学习。

协程的用法

在这里插入图片描述

  • 首先新建一个场景,在项目资源下面右键创建一个C#脚本,这里取名为StudyCoroutine,然后将脚本拖到主摄像机上并打开。
    在这里插入图片描述

  • 将默认的Update函数删除,并写入一个for循环,预期输出0-9。然后启动程序

在这里插入图片描述

  • 程序一下就执行完循环并输出了我们想要的结果。

  • 那么我们怎么才能让程序能够跑一下停一下,每隔一秒输出一个我们想要的数字呢?

  • 这里我们就需要用到协程,因为协程有一个并行执行的功能。
    在这里插入图片描述

  • 这里yield会构造一个返回值类型为IEnumerator类型的对象,详细的底层实现今天的课程暂且不谈。

在这里插入图片描述
在这里插入图片描述

  • 接着我们去Unity启动看下效果。

在这里插入图片描述

  • 当我们按下空格键时,程序输出到7就停止执行了。这就是我们停止协程的第一种方法。

在这里插入图片描述
在这里插入图片描述

  • 我们启动协程的时候也可以用StartCoroutine的方法,并传入一个协程的名字,这里以CountCo为例。那么这样的话,我们在停止的时候就可以用StopCoroutine("CountCo")来停止。

在这里插入图片描述
在这里插入图片描述

  • 还有一种方法,是我们利用StartCoroutine的返回值类型,它返回的类型是一个Coroutine类型,也就是一个协程对象。其实Unity在引擎内部存的就是这样一个协程对象。我们将它保存下来,命名为Co

  • Coroutine co 然后定义Co =StartCoroutine("CountCo"),这样我们在停止的时候 就可以用StopCorotinue(co)来停止。

  • 此外,协程启动时必须用字符串方式启动,才能用字符串方式停止。这是新手小白们常犯的错误。

系列配套视频戳这里

更多学习资源请加QQ:1517069595获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值