【unity知识点】Unity 协程Coroutine

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

前言

Unity 协程是一种特殊的函数,可以在游戏中实现延迟执行、按顺序执行和异步操作等功能。它使用了迭代器(Iterator)的概念,通过 yield 关键字来控制执行流程。下面是 Unity 协程的使用和使用场景的详细介绍。

使用协程的步骤:

  1. 在脚本中定义一个协程方法,返回值类型为 IEnumerator
  2. 在协程方法内部使用 yield 关键字来控制执行流程。
  3. 通过调用 StartCoroutine 方法来启动协程。

使用场景示例:

  1. 延迟执行:

    IEnumerator DelayedAction()
    {
        yield return new WaitForSeconds(2.0f); // 等待2秒
        Debug.Log("Delayed action executed after 2 seconds");
    }
    
    void Start()
    {
        StartCoroutine(DelayedAction());
    }
    

    在上述示例中,协程 DelayedAction 会在等待 2 秒后执行延迟操作。

  2. 按顺序执行:

    IEnumerator SequentialActions()
    {
        Debug.Log("Action 1");
        yield return new WaitForSeconds(1.0f); // 等待1秒
        Debug.Log("Action 2");
        yield return new WaitForSeconds(2.0f); // 等待2秒
        Debug.Log("Action 3");
    }
    
    void Start()
    {
        StartCoroutine(SequentialActions());
    }
    

    在上述示例中,协程 SequentialActions 会按顺序执行三个动作,并在每个动作之间等待指定的时间。

  3. 异步操作:

    IEnumerator AsyncOperation()
    {
        AsyncOperation asyncOp = SceneManager.LoadSceneAsync("NextScene");
        asyncOp.allowSceneActivation = false; // 禁止自动切换场景
    
        while (!asyncOp.isDone)
        {
            float progress = Mathf.Clamp01(asyncOp.progress / 0.9f); // 获取加载进度(注意:进度在 0.9 时切换场景)
            Debug.Log("Loading progress: " + (progress * 100) + "%");
    
            if (progress >= 0.9f)
            {
                asyncOp.allowSceneActivation = true; // 允许切换场景
            }
    
            yield return null;
        }
    }
    
    void Start()
    {
        StartCoroutine(AsyncOperation());
    }
    

    在上述示例中,协程 AsyncOperation 会异步加载场景,并打印加载进度。在加载进度达到 0.9 时,允许切换场景。

Unity 协程的使用场景非常广泛,可以用于实现动画效果、延迟操作、按顺序执行多个任务、异步加载资源等。它提供了一种简洁、易于理解和管理的方式来处理需要延迟或异步执行的逻辑。

yield return new WaitForSeconds和yield return new WaitForFixedUpdate的区别

yield return new WaitForSecondsyield return new WaitForFixedUpdate 是用于控制协程执行的两种不同方式,它们的使用场景和效果有所不同。

  1. yield return new WaitForSeconds

    • 用法:这个语句用于在协程中等待一定的时间间隔后再继续执行后续代码。
    • 示例用法:
      IEnumerator MyCoroutine()
      {
          Debug.Log("Start");
          yield return new WaitForSeconds(2.0f); // 等待2秒
          Debug.Log("After 2 seconds");
      }
      
    • 效果:在上述示例中,协程会在执行到yield return new WaitForSeconds(2.0f)时暂停 2 秒,然后再继续执行后续代码。
  2. yield return new WaitForFixedUpdate

    • 用法:这个语句用于在协程中等待下一帧更新后再继续执行后续代码。
    • 示例用法:
      IEnumerator MyCoroutine()
      {
          Debug.Log("Start");
          yield return new WaitForFixedUpdate(); // 等待下一帧更新
          Debug.Log("After FixedUpdate");
      }
      
    • 效果:在上述示例中,协程会在执行到yield return new WaitForFixedUpdate()时等待当前帧更新结束,然后再继续执行后续代码。

总结来说,yield return new WaitForSeconds 用于在协程中控制时间间隔,而 yield return new WaitForFixedUpdate 用于等待下一帧更新。你可以根据实际需求选择合适的等待方式,来实现协程中的逻辑控制。

开始和停止携程

# 开始协程:
private Coroutine myCoroutine;
myCoroutine = StartCoroutine(MyCoroutine());

# 停止协程:
StopCoroutine(myCoroutine);

# 停止名为 "Start" 的协程
StopCoroutine("Start");

# 停止当前对象上所有正在运行的协程
StopAllCoroutines();

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

【unity知识点】Unity 协程Coroutine,# unity小技巧,unity,游戏引擎,游戏文章来源地址https://www.toymoban.com/news/detail-788915.html

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

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

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

相关文章

  • 【Unity知识点详解】自定义程序集

            今天来介绍一下Unity中的自定义程序集。在项目开发中我们经常接触到第三方插件的程序集,如DOTween、Newtonsoft.Json等。         使用自定义程序集有这么几个好处: 方便代码的的复用。当某一功能模块需要在多个项目中重复使用时,可以将代码编译成程序集,将程

    2024年02月19日
    浏览(43)
  • Unity3D知识点精华浓缩

    一、细节 1、类与组件的关系 2、Time.deltaTime的含义 3、怎么表示一帧的移动距离 4、Update和LateUpdate的区别和适用场景 5、找游戏对象的方式(别的对象 / 当前对象的子对象) 6、组件1调用组件2中方法的方式 7、在面板中获取外部数据的方法 8、序列化属性、序列化自定义对象的

    2024年04月09日
    浏览(39)
  • 【unity数据持久化】XML数据管理器知识点

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 XML是什么 XML(Extensible Markup Language)是一种类似于 HTML,但是没有使用预定义标记的语言。因此,可以根据自己的设计需求

    2024年02月11日
    浏览(41)
  • 【Unity知识点详解】Button点击事件拓展,单击、双击、长按实现

    Button拓展         今天来聊一下关于Button的事件拓展,这里只是拿Button来举例,Unity中其他的UI组件如Toggle、Slider等都也适用。         我们知道在Button中我们可以通过onClick的方式来添加点击事件,但在游戏开发过程中我们往往对Button有着更多的功能需求,比如说双击、

    2024年04月10日
    浏览(56)
  • 【新】Unity Meta Quest MR 开发(二):场景理解 Scene API 知识点

    此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区 。这是一个高质量 XR 社区,博主目前在内担任 XR 开发的讲师。此外,该社区提供教程答疑、及时交流、进阶教程、外包、行业动态等服务。 社区链接: Spatial XR 高级社区(知识星球) Spatial XR 高级社区

    2024年01月25日
    浏览(42)
  • 前端知识点、技巧、webpack、性能优化(持续更新~)

    可以把  图片转换成  base64  放在src里面   减少服务器请求  但是图片会稍微大一点点 以上的方法不需要一个一个自己转化 可以在webpack  进行 性能优化   (官网有详细描述)

    2024年03月10日
    浏览(46)
  • Python爬虫|基础知识点详细汇总(requests、urllib、re、bs4、xpath、PyQuery、jsonpath、多线程、协程、数据保存、selenium)

    1. 请求数据 ① requests (1) 基本使用 参数 对响应内容的操作 (2) Requests进阶:使用Session 为什么要用 Session? Session代表服务器与浏览器的一次会话过程,Session对象存储了特定用户会话所需的信息 例如:一定时间内记录账号密码 (自动登录) 可以加快 requests请求速度 需要客户端登录的

    2023年04月08日
    浏览(56)
  • 飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等

    ansible 配置文件的优先级 尝试开始进行操作 ansible常用模块 ansible 的playbook 示例 安装php playbook中变量的引用

    2024年02月04日
    浏览(44)
  • 视频知识点(17)- flv.js 实现播放本地视频文件的技巧

    目录 问题 解决 一、启动 HTTP 静态服务 二、播放 URL 三、允许静态服务跨域

    2023年04月08日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包