我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Unity3D 协程 浅谈

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Unity3D 协程 浅谈

理解:协程不是线程,也不是异步执行(知道就行)。

1.协程和MonoBehaviour的Update函数一样,也是在MainThread中执行的(一定得明白这句话意思)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Start () {
    StartCoroutine(HelloCoroutine());
}
 
void Update () {
    Debug.Log("Update...");
}
void LateUpdate()
{
    Debug.Log("LateUpdate...");
}
IEnumerator HelloCoroutine()
{
    while (true)
    {
        Debug.Log("Coroutine...");
        yield return null;
    }
}



1

 

对比以上代码和两张截图。这样写协程,好像是高级一点的Update写法。至少应该可以看出,这种写法的协程可以完成update的功能。


2.与update不一样的地方。

1
2
3
4
5
6
7
8
9
10
11
12
IEnumerator Count()
   {
       int seconds = 0;
       while (true)
       {
           for (float timer = 0; timer < 2; timer += Time.deltaTime)
               yield return 0;
 
           seconds++;
           Debug.Log(seconds + " seconds have passed since the Coroutine started.");
       }
   }<br>

  

3.yield

  yiled return null  等同于 yield return 0

我这边的理解是,停止正在执行的方法,并从下一帧开始执行(一般是0.02秒,与Update的每一帧是一样的,具体看Unity设置的timer)。

 

4.协程是可以传递参数的。

5.协程还可以嵌套协程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
IEnumerator HelloCoroutinue()
    {
        Debug.Log("Start----");
        yield return StartCoroutine(Wait(0.2f)); //  yield return new WaitForSeconds(0.2f);最终达到的效果是一样的。
        Debug.Log("End----");
}
    IEnumerator Wait(float s)
    {
        for(float timer =0;timer< s;timer+=Time.deltaTime)
        {
            Debug.Log("当前 timer" + timer.ToString());
            yield return 0; // yield return null;
        }
        Debug.Log("Wait.....");
    }

  

看截图中画线的时间差,再次验证了与Update好像。暂停的时间都是一样的。

可以看到暂停了当前的方法去执行yield return后的方法。

 

补充注意: 

           a.多个协程可以同时运行,它们会根据各自的启动顺序来更新;

    b.如果你想让多个脚本访问一个协程,可以定义为静态的协程;


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Unity3D 协程 浅谈

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Unity3D 协程 浅谈

理解:协程不是线程,也不是异步执行(知道就行)。1.协程和MonoBehaviour的Update函数一样,也是在MainThread中执行的(一定得明白这句话意思)。12345678910111213141516171819void St
2023-01-31

浅谈KCP协议

KCP是一种基于UDP的快速可靠协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟可以降低70%的传输效果,是一种纯算法的二进制协议。
KCP移动开发2024-11-30

浅谈Unity3D与Cocos2D的优点与差异

编程学习网:初学游戏开发,对Unity3D与Cocos2D不熟悉?本篇教程将告诉你Unity3D与Cocos2D的优点与差异。
浅谈Unity3D与Cocos2D的优点与差异
2024-04-23

浅谈WebSocket协议-RFC 6455

这些方式在效率和网络带宽利用率方面存在诸多问题。WebSocket协议应运而生,对外提供了简单的双向数据传输能力。

浅谈H3C iMC结合SNMPv3协议管

网络管理软件收到越来越多客户的欢迎,IT厂商也积极推出自己的网络管理软件,至于使用效果和体验,大家自己感受,IT圈里混的,你们都懂的。结合个人最近实施项目,部署H3C(据说现在叫“新华三”)研发的iMC运维管理平台,涉及到不同厂商的设备,简
2023-01-31

浅谈3A和进程

3A安全认证服务: AAA 认证(Authentication)含义:1验证(Authentication)用户的身份与可使用的网络服务;2授权(Authorization):依据认证结果开放网络服务给用户;3计帐(Accounting):
2023-01-31

漫谈C++20协程

本篇文章我们只简单地介绍一下c++20协程,起到抛砖引玉效果,感兴趣的读者可以更深入阅读相关文献。
C++20协程2024-11-30

浅谈WebSocket协议在Web领域的应用

WebSocket是一种双向通信协议,主要应用在Web浏览器,解决服务器端主动向浏览器推送消息的问题。WebSocket常见的应用场景有页游、视频网站、在线文档、股票网站等。
WebSocketWeb2024-11-30

浅谈Shell 流程控制

和java、php等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法):
2022-06-04

浅谈 Function Programing 编程范式

FP 是 Declarative Programming 的代表,逻辑为用较为抽象的程式码,理解代码想要达到怎样的目标,Function 之间不会互相共用state 状态(着重 what)。而 Imperative Programming
FP代码编程2024-12-13

浅谈Springrefresh的工作流程

这篇文章主要介绍了浅谈Springrefresh的工作流程,refresh是AbstractApplicationContext中的一个方法,负责初始化ApplicationContext容器,让我们一起来学习一下吧
2023-05-17

浅谈node.js中async异步编程

1.什么是异步编程?异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等。 示例:for (var i = 1; i <= 3; i++)
2022-06-04

浅谈Go1.18中的泛型编程

目录前言以前的Go泛型泛型是什么Go的泛型泛型函数泛型类型类型集合和接口的差异总结前言经过这几年的千呼万唤,简洁的Go语言终于在1.18版本迎来泛型编程。作为一门已经有了14年历史的强类型语言,很难相信它到现在才开始有一个正式的泛型。以前的
2022-06-07

浅谈一下Java线程组ThreadGroup

ThreadGroup是为了方便线程管理出现了,可以统一设定线程组的一些属性,比如setDaemon,设置未处理异常的处理方法,设置统一的安全策略等等,需要的朋友可以参考下
2023-05-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录