Unity 协程 Unity Task UniTask

这篇具有很好参考价值的文章主要介绍了Unity 协程 Unity Task UniTask。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

协程

使用 StartCoroutine 和 IEnumerator
yield return null 暂停执行并随后在下一帧恢复
yield return new WaitForSeconds(1f); 延迟1秒
waitfor系列有好几个
Unity 协程 Unity Task UniTask
WaitForSeconds 和 WaitForSecondsRealtime 的区别

使用缩放时间将协程执行暂停指定的秒数。

实际暂停时间等于给定时间除以 Time.timeScale。如果要使用未缩放时间进行等待,请参阅 WaitForSecondsRealtime。在协程中,WaitForSeconds 只能与 yield 语句结合使用。

有一些因素可能意味着实际等待的时间量与指定的时间量不完全一致。
1 在当前帧的 end 处开始等待。如果您在一个非常长的帧(例如,具有同步加载等阻止主线程的长时间操作的帧)上使用持续时间“t”启动 WaitForSeconds,协程将在帧结束后返回“t”秒,而不是取消后“t”秒。
2 允许协程在“t”秒后继续在第一帧上执行,不是确切的“t”秒之后。

WaitForEndOfFrame
等待,直到该帧结束,在 Unity 渲染每一个摄像机和 GUI 之后,在屏幕上显示该帧之前。

可以用它将显示内容读取到纹理中,将其编码为图像文件(请参阅 Texture2D.ReadPixels 和 Texture2D.Texture2D),并将其存储在设备上。
从 Game 视图切换到 Scene 视图将导致 WaitForEndOfFrame 冻结。它只在应用程序切换回 Game 视图时才会继续。只有当应用程序在 Unity 编辑器中运行时才会发生这种情况。

注意:在批处理模式下,不会在编辑器上调用此协程。如需了解更多详细信息,请参阅手册中的命令行参数页面。

WaitWhile 直到提供的委托评估为 false
WaitUntil 直到提供的委托评估为 true

注意:可以使用 StopCoroutine 和 StopAllCoroutines 来停止协程。 当用 SetActive(false) 禁用某个协程所附加到的游戏对象时,该协程也将停止。调用 Destroy(example)(其中 example 是一个 MonoBehaviour 实例)会立即触发 OnDisable,并会处理协程,从而有效地停止协程。最后,在帧的末尾调用 OnDestroy。

通过在 MonoBehaviour 实例上将 enabled 设置为 false 来禁用 MonoBehaviour 时,协程不会停止。

协程的缺点就是
他必须依赖 Monobehavior

Unity Task

相比 协程 Unity 的 Task 更加灵活

看例子

void Start()
{ 
     Debug.Log("1 : " + Thread.CurrentThread.ManagedThreadId);
     this.aaa();
     Debug.Log("2 : " + Thread.CurrentThread.ManagedThreadId);
}

async void aaa()
{
    Debug.Log("3 : " + Thread.CurrentThread.ManagedThreadId);
    await Task.Run(() =>
    {
        Debug.Log("5 : " + Thread.CurrentThread.ManagedThreadId);
        Thread.Sleep(3000);
        Debug.Log("6 : " + Thread.CurrentThread.ManagedThreadId);
    });
    Debug.Log("4 : " + Thread.CurrentThread.ManagedThreadId);
}

你会发现 Task.Run 里面的内容是单独id 也就是 5 和 6
其他所有的都是主线程id文章来源地址https://www.toymoban.com/news/detail-474826.html

到了这里,关于Unity 协程 Unity Task UniTask的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【unity】C#协程IEnumerator的使用(下)

    在Unity中,使用协程可以很方便地实现延时执行,即在一定的时间后执行某个代码块。例如,我们可

    2024年02月01日
    浏览(39)
  • Unity 如何使用协程等待加载完成

    今天在项目打包后遇到一个bug 项目在电脑上跑没问题,但是在手机端时,由于手机较差的性能,导致异步加载的资源需要等待较长的时间. 而我在一个地方本以为是同步加载的资源,但是在调用时发现本该被加载完成的资源加载失败, 大佬查看过底层实现后给出结论:这个资源使用了

    2024年02月16日
    浏览(45)
  • Unity C# 之 Task、async和 await 、Thread 基础使用的Task的简单整理

    目录 Unity C# 之 Task、async和 await 、Thread 基础使用的Task的简单整理 一、Task、async和 await 、Thread 基础概念 1、线程,多线程 2、Task  3、async (await ) 二、Task 的基础使用,Task 的创建 和 启动 1、创建并运行一个Task 2、创建有返回值的 Task 3、Task提供了 task.RunSynchronously()用于同步

    2024年02月12日
    浏览(44)
  • Unity中C#使用协程控制Shader材质变化

    在上一篇文章实现了C#脚本简单修改Shader材质的效果后,我们使用按钮点击结合协程来实现一下游戏中角色常见的效果:受击、中毒、消融效果 我们继续使用上一篇的 Shader 和 C# 脚本来继续测试 Unity中C#如何访问并修改Shader材质 Unity中的协程可以理解为 C# 中多线程的作用,在

    2024年02月04日
    浏览(48)
  • 【Unity3D日常开发】Unity3D中协程的使用

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 最近有小伙伴问协程怎么用、怎么写,我也是会用会写,但是原理不是很明白。 学习了一下,总结出

    2024年02月12日
    浏览(55)
  • Unity3D中的C#协程(概念、使用方法、底层原理)

             Unity3D 中的协程是针对 Unity3D 框架和 C# 编程语言定制的 ,具有便捷的使用方式和良好的效率。其他语言Python、Lua等也支持协程,但是底层实现的细节可能不同。在 Unity3D 引擎中, 协程被 Unity3D 引擎的主循环所驱动 。         协程(Coroutine)是一种编程概念

    2024年02月08日
    浏览(51)
  • Unity C# 之 Task、async和 await 结合使用的一些情况处理

    目录 Unity C# 之 Task、async和 await  结合使用的一些情况处理 一、简单介绍 二、把 async 函数,通过变化转为一般的函数 三、在 async 函数中,切换到主线程,并等待主线程执行完毕,继续 async 中的代码 Unity 在使用 Task 结合 async (await) 的时候,偶尔会遇到一些特殊情况,需要

    2024年01月22日
    浏览(44)
  • Unity中的异步编程【5】——在Unity中使用 C#原生的异步(Task,await,async) - System.Threading.Tasks

    1、System.Threading.Tasks中的Task是.Net原生的异步和多线程包。 2、UniTask(Cysharp.Threading.Tasks)是仿照.Net原生的Task,await,async开发的一个包,该包专门服务于Unity,所以取名UnityTask,简称UniTask。 3、既然有Task了,为啥还要搞一个UniTask (1)Task可以用在PC和Android上,但是在WebGL上则会

    2023年04月17日
    浏览(48)
  • 【unity知识点】Unity 协程Coroutine

    Unity 协程是一种特殊的函数,可以在游戏中实现延迟执行、按顺序执行和异步操作等功能。它使用了迭代器(Iterator)的概念,通过 yield 来控制执行流程。下面是 Unity 协程的使用和使用场景的详细介绍。 在脚本中定义一个协程方法,返回值类型为 IEnumerator 。 在协程方

    2024年02月01日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包