Unity中的协程用法以及注意事项

  前沿:这章节,将简单的总结一下如何开启协程,关闭协程,以及使用协程的注意事项。

  一、如何开启协程:

private void Start()
    {
        m_SpherePrefab = Resources.Load<GameObject>("Test/Sphere_00");
        Debug.Log("m_SpherePrefab = " + m_SpherePrefab);

        #region 协程的学习及使用

        StartCoroutine(Test_00());
        StartCoroutine("Test_01");
        StartCoroutine(Test_02(5, 9));

        #endregion
    }

    private IEnumerator Test_00()
    {
        Debug.Log("协程 Test_00 准备执行");
        yield return new WaitForSeconds(3.0f);
        Debug.Log("协程 Test_00 执行完毕");
    }

    private IEnumerator Test_01()
    {
        Debug.Log("协程 Test_01 准备执行");
        yield return new WaitForSeconds(5.0f);
        Debug.Log("协程 Test_01 执行完毕");
    }

    private IEnumerator Test_02(int a, int b)
    {
        Debug.Log("协程 Test_02 准备执行");
        yield return new WaitForSeconds(8.0f);
        Debug.Log("协程 Test_02:" + a + " " + b);
        Debug.Log("协程 Test_02 执行完毕");
    }

    这里,例举了开启协程的3种方法,以及协程传递数据的使用方法。

  二、如何停止协程

private void Update()
    {
        if (m_CurrentCount < m_MaxCount)
        {
            if (Time.time > m_NextCloneTime)
            {
                //克隆
                Clone();
            }
        }

        if (Input.GetKeyUp(KeyCode.T))
        {
            //通过 StopCoroutine 停止协程的时候,需要用方法名来停止,那么在开启协程的时候,也需要使用方法名来开启
            //错误的停止方式
            //StopCoroutine(Test_00());
        }

        if (Input.GetKeyUp(KeyCode.Y))
        {
            //通过 StopCoroutine 停止协程的时候,需要用方法名来停止,那么在开启协程的时候,也需要使用方法名来开启
            //正确的停止方式
            StopCoroutine("Test_01");
        }

        if (Input.GetKeyUp(KeyCode.U))
        {
            StopAllCoroutines();
        }
    }

    这里,指示了停止协程的方法。

  三、注意事项

    1.若是停止某个指定的协程(StopCoroutine),则填写的参数应该是方法名,并且开启这个协程的时候,填写的参数应当也是方法名。

    2.在使用使用StopAllCoroutines停止协程时,应当注意到,不是停止所有的协程,而是停止当前脚本下的所有协程。

原文地址:https://www.cnblogs.com/Dean27/p/8610219.html

时间: 2024-11-08 21:12:49

Unity中的协程用法以及注意事项的相关文章

Unity中的协程(一)

这篇文章很不错的问题,推荐阅读英文原版: Introduction to Coroutines Scripting with Coroutines   这篇文章转自:http://blog.csdn.net/huang9012/article/details/38492937 协程介绍 在Unity中,协程(Coroutines)的形式是我最喜欢的功能之一,几乎在所有的项目中,我都会使用它来控制运动,序列,以及对象的行为.在这个教程中,我将会说明协程是如何工作的,并且会附上一些例子来介绍它的用法

Unity中使用协程进行服务端数据验证手段

近期在做项目中的个人中心的一些事情,用户头像上传,下载,本地缓存,二级缓存,压缩,这些都要做,麻雀虽小五脏俱全啊,也是写的浑浑噩噩的, 当我们在上传用户头像的时候,向服务端发送上传头像请求之前,一般都会做一次验证,向服务端获取token验证信息,来确保非法上传,如果不做这个那么会有非法用户上传非法图像,使你的服务器 带来未知的灾难. 而验证的逻辑很好写,并没有什么难度,比如: Server.SendMessage("获取token"); Client.Receive(string to

Unity中使用协程实现倒计时功能

unity中协程的功能很强大,能够充分发挥unity协程功能的地方就是游戏的倒计时,今天我们就来实现一个简易版本的倒计时. 新建一个场景,给camera添加一个脚本,脚本内容如下: using UnityEngine; using System.Collections; public class ShowNumber : MonoBehaviour { private int tmp = 10; // Use this for initialization void Start () { //开

在PHP中使用协程实现多任务调度

PHP5.5一个比较好的新功能是加入了对迭代生成器和协程的支持.对于生成器,PHP的文档和各种其他的博客文章已经有了非常详细的讲解.协程相对受到的关注就少了,因为协程虽然有很强大的功能但相对比较复杂, 也比较难被理解,解释起来也比较困难. 这篇文章将尝试通过介绍如何使用协程来实施任务调度, 来解释在PHP中的协程. 我将在前三节做一个简单的背景介绍.如果你已经有了比较好的基础,可以直接跳到“协同多任务处理”一节. 迭代生成器 生成器也是一个函数,不同的是这个函数的返回值是依次输出,而不是只返回一

Unity里的协程Coroutines

Unity里的Coroutine在帮助我们实现序列化事件时尤其方便.可以让事件依次发生,可以让事件A等待事件B结束后才开始执行. 但需要厘清几个基本概念. Coroutines不是多线程,不是异步技术.Coroutines都在MainThread中执行,且每个时刻只有一个Coroutine在执行. Coroutine是一个function,可以部分地执行,当条件满足时,未来会被再次执行直到整个函数执行完毕. A coroutine is a function that is executed p

深入tornado中的协程

tornado使用了单进程(当然也可以多进程) + 协程 + I/O多路复用的机制,解决了C10K中因为过多的线程(进程)的上下文切换 而导致的cpu资源的浪费. tornado中的I/O多路复用前面已经讲过了.本文不做详细解释. 来看一下tornado中的协程模块:tornado.gen: tornado.gen是根据生成器(generator)实现的,用来更加简单的实现异步. 先来说一下tornado.gen.coroutine的实现思路: 我们知道generator中的yield语句可以使

fasthttp中的协程池实现

fasthttp中的协程池实现 协程池可以控制并行度,复用协程.fasthttp 比 net/http 效率高很多倍的重要原因,就是利用了协程池.实现并不复杂,我们可以参考他的设计,写出高性能的应用. 入口 // server.go func (s *Server) Serve(ln net.Listener) error { var lastOverflowErrorTime time.Time var lastPerIPErrorTime time.Time var c net.Conn v

Python 中的协程 (5) 无阻塞

1 异步程序依然会假死 freezing 1)一般程序的调用方 freezing import asyncio import time import threading #定义一个异步操作 async def hello1(a,b): print(f"异步函数开始执行") await asyncio.sleep(3) print("异步函数执行结束") return a+b #在一个异步操作里面调用另一个异步操作 async def main(): c=await

【Unity优化】如何实现Unity编辑器中的协程

Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种变化过程要经历无数中间步骤,调用N多次Update,如果直接在Update中不断刷新,界面很容易直接卡死.所以在一个协程中进行一些优化,只保留用户最后一次参数修正,省去中间步骤,就会好很多.这属于Unity编辑器的内容,也属于优化的内容,还是放在优化中吧. 解决问题思路 Unity官网的questi