Unity-协同程序

2023-11-12

 知识点一 Unity是否支持多线程

1、首先要明确一点Unity是支持多线程的,只是新开线程无法访问Unity相关对象的内容

******Unity中的多线程 要记住关闭***********

Unity中去使用:

如果说,我们一开始在Start内创建一个多线程,那么我们无法在start外得到以及销毁它。

 因此我们大部分时候在类中定义它。将线程作为一个成员变量。

 线程内传入的是一个委托。(第二种重载 为无参无返回的委托,也就是说需要传一个无参无返回函数)

 完美运行:证明在Unity中我们是可以使用多线程的。

 我们在线程中写一个死循环来计时,让这个线程一直跑。

 运行:确实如我们所想一直在运行。

 我们关闭Unity运行:

 发现这个线程还在不停的运行!

 为什么?因为Unity是一个编辑器的存在,开的线程和Unity共生了。Unity本质上也是一个软件,只要软件没有关或者脚本没有改变,这个线程就会一直运行。

因此,******Unity中的多线程 要记住关闭***********

 至于说为什么在Unity中新开的线程无法访问Unity相关对象:

我们在新开线程中改变物体的position:

 运行:发现报错了。transform需要在主线程中去运行。

 因此,Unity虽然支持多线程,但是新线程无法访问Unity内容。

我们甚至只是想在新线程中去打印Unity的内容都是不行的。不谈改变Unity,打印都不行!

 不能访问

新开的线程虽然不能访问Unity,但是多线程可以进行一些复杂的逻辑计算:例如A*算法、网格计算,复杂的计算可能会卡住主线程,因此我们用副线程去计算。算好了,主线程去用。

声明一个变量作为一个公共内存容器,一个线程放,一个线程取。

 在多线程中放入队列中。

 在Unity主线程中,去判断、获得队列中的内容。

 通过中间商来进行数据的交互,很重要。

知识点二 协同程序是什么?

协同程序简称协程       它是“假”的多线程,它不是多线程 他的本质是一个迭代器!

 知识点三 协同程序和线程的区别

 新线程是和主线程并行执行,就像两条平行线一样。

 协程和主线程则是,依附在主线程上。

 当一个函数被协程运行时,它可以分成n个部分。它不需要在一个主线程的流程中执行完毕。Unity的主线程也是一个无限循环的线程。协程执行函数的1部分,根据返回的内容决定是否继续向下执行。如果不执行,这个协程就会被挂起。分时分步,执行的时间和执行的步骤都是我们可以控制的。

直到函数被执行完毕,协程结束。

知识点四 协程的使用

 1、声明协程函数

在MyCoroutine中,先输出i, 然后返回的条件为:要等待5秒钟,5秒之后再输出str

 2、开启协程函数(StartCoroutine())

 执行后没有反应:

 常用开启的方式:StartCoroutine

 第一种重载:直接写协程函数。

 第二种重载:直接传字符串(这种的不常用)

第三种重载:字符串+参数(也不常用)

 最常用的方法:

 另一种常用方法:本质上是一样的。

 运行:协程开启

 再协程函数中,函数被yield return分成了几部分。一个协程函数可以有多个yield return。

 只要碰到 yield return 会根据条件来执行后面的程序。(例如:等5秒、等1秒)

一个协程函数可以执行多次:

 3、关闭协程

1、关闭所有协程


 2、关闭指定协程

 StartCoroutine返回的是Coroutine,是一个协程对象。我们可以将它存起来。

 运行:发现输出了三个1,两个123。三个协程都输出了1,当在等待5秒的过程中,c1被关闭了。只有c2,c3输出了123.

 协程中写一个死循环,一定条件下对主线程没有太大影响。

 知识点五 yield return 不同内容的含义

1、下一帧执行:yield return 数字(null)

 无论数字是多少或者是null,都表示下一帧执行下面语句。

在Update和LateUpdate之间执行。

 2、等待指定秒后执行:yield return new WaitForSeconds() 

 在start()函数中执行了MyCoroutine()输出了i。等待5秒后输出str,那么这个输出是什么时候执行呢?在Update和LateUpdate之间执行。

 3、等待下一个固定物理帧更新时执行:yield return new WaitForFixedUpdate()

 FixUpdate和碰撞检测相关函数之后执行。

4、等待摄像机和GUI渲染完成后执行:yield return new WaitForEndOfFrame()

 在LateUpdate之后的渲染相关处理完毕后执行。

5、异步加载相关的内容

6、跳出协程

yield break;

 yield return之后的语句不会执行。

 知识点六 协程受对象和组件失活销毁的影响

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity-协同程序 的相关文章

  • k-means聚类算法总结

    聚类概念 聚类分析是在对象数据中发现对象之间关系 一般来说 组内相似性越高 组间相似性越大 则聚类的效果越好 k means概念 k means是一种无监督学习 它会将相似的对象归到同一类中 k means聚类的优缺点 优点 容易实现 缺点

随机推荐

  • vue hover事件

    Vue 框架中的 hover 事件可以通过在 HTML 标签上使用 v on mouseover 或者简写为 mouseover 来监听 例如
  • kubernetes

    Deploy资源 spec progressDeadlineSeconds 600 等待多少秒才能确定Deployment进程是卡住的 replicas 1 revisionHistoryLimit 10 指定保留多少旧的 ReplicaS
  • 因果3-因果图

    上一章我们介绍了潜在结果模型 这一章我们尝试从图的角度理解因果 大家都有图论基础 我就不多赘述图的基本概念了 在因果图里我们主要研究DAG directed acyclic graph 有向无环图 如图1 图1 一个DAG例子 Bayesi
  • 22道高级 React 面试题

    Q1 什么是虚拟DOM 虚拟DOM VDOM 它是真实DOM的内存表示 一种编程概念 一种模式 它会和真实的DOM同步 比如通过ReactDOM这种库 这个同步的过程叫做调和 reconcilation 虚拟DOM更多是一种模式 不是一种特
  • 【JavaDebug(二)】之Mysql语法异常java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; chec

    本文章由公号 开发小鸽 发布 欢迎关注 老规矩 妹妹镇楼 一 异常 一 异常描述 java sql SQLSyntaxErrorException You have an error in your SQL syntax check the
  • 【binkw32.dll下载】binkw32.dll缺失怎么办

    binkw32 dll文件对一些电脑软件 电脑游戏等程序的正常运行起到关键性作用 对于弹出缺少此类文件的弹窗 用户们很多时候也摸不着头脑 程序明明上次都能正常运行 突然就弹出缺少binkw32 dll文件的提醒窗口 通过小编此次编辑的文章
  • 修改DIV滚动条样式

    滚动条样式 div webkit scrollbar 滚动条整体样式 width 5px 高宽分别对应横竖滚动条的尺寸 height 5px div webkit scrollbar thumb 滚动条里面小方块 border radius
  • 剖析ElasticSearch的评分计算过程

    剖析elasticsearch的评分计算过程 es搜索结果是怎样的排序的 准备测试数据 搜索 剖析参数含义 结论 es搜索结果是怎样的排序的 es的排序准则的相关度 根据搜索 关键词 计算关键词在一个文档中的得分 得分越高结果越靠前 那么计
  • github服务器停止响应,如何解决“git pull,致命:无法访问'https://github.com ... \':服务器空回复”...

    当我使用Git命令 git pull 更新我的存储库时 消息如下 致命 无法访问 来自服务器的空回复 如何解决 git pull 致命 无法访问 https github com 服务器空回复 而且我尝试使用GitHub的应用程序 但此提醒
  • QT5开发之 信号与槽机制

    文章目录 什么是信号与槽 信号与槽原理 如何实现信号与槽机制 实现方式 UI方式 代码方式 QT4 QObject类 connect和disconnect 连接函数 QT4 QT5使用 找到类与类的信号与槽函数 QT4 QT5使用 举例 总
  • Windows下 Cppcheck 的使用教程

    1 Cppcheck是什么 CppCheck是一个C C 代码缺陷静态检查工具 不同于C C 编译器及其它分析工具 CppCheck只检查编译器检查不出来的bug 不检查语法错误 所谓静态代码检查就是使用一个工具检查我们写的代码是否安全和健
  • 计算机窗口移动不了怎么办,电脑鼠标拖不动文件怎么办 电脑鼠标拖动不灵敏如何解决...

    在我们使用电脑的时候 往往都会用到鼠标拖动文件 不知道有没有遇到过电脑鼠标拖不动文件的时候 这种情况大家是怎么解决的呢 不知道没关系 下面小编为大家带来电脑鼠标拖不动文件的解决方法 大家可以按照下面的步骤即可解决 电脑鼠标拖不动文件怎么办
  • 支付宝支付回调,回调日志记录

    1 支付报支付回调方法 public function aliPayNotify try app PayService alipay collect app gt verify collectData collect gt all 获取支付
  • 【Zabbix实战之运维篇】Zabbix监控平台的简单性能调优

    Zabbix实战之运维篇 Zabbix监控平台的简单性能调优 一 Zabbix性能优化介绍 1 造成Zabbix服务器变慢原因 2 Zabbix性能调优的方法 二 检查Zabbix服务器的资源占用情况 1 检查Zabbix各组件容器的资源占
  • [转载]YUV格式纹理贴图的例子

    frameworks native opengl tests gl2 yuvtex gl2 yuvtex cpp 是Android提供的yuv格式纹理贴图的例子 前面先申请存放纹理数据的buffer yuvTexBuffer new Gra
  • 根据哈夫曼树构建哈夫曼编码

    实验题 构造哈夫曼树生成哈夫曼编码 编写一个程序 构造一棵哈夫曼树 输出对应的哈夫曼编码和平均查找长度 并对下表 所示的数据进行验证 单词及出现的频度 单词 The of a to and in that he is at on for H
  • Github下载任意版本的VsCode

    下载历史版本VsCode zip 下载链接由三部分组成 固定部分 commit id VSCode win32 x64 版本号 zip 固定部分 https vscode cdn azure cn stable Commit id 打开 v
  • 嵌入式linux通过systemd自启动一个python代码

    一直想实现一段自启动的代码 今天尝试了下 成功了 做个记录 首先 我用的是imx6ull处理器 嵌入式linux内核版本为4 9 88 然后 上位机用的虚拟机ubuntu22 04 01 先在ubuntu上面试了试 能够自启动 然后再下载到
  • linux系统调用(持续更新....)

    随着自己接触越来越多的linux的系统函数发现自己在linux系统调用方面有很多不足 每次遇到系统调用函数都要百度一遍看一下用法 所以我打算写一篇博客来记录在开发过程遇到的系统调用函数 方便自己查阅 本文持续更新 1 popen 函数 2
  • Unity-协同程序

    知识点一 Unity是否支持多线程 1 首先要明确一点Unity是支持多线程的 只是新开线程无法访问Unity相关对象的内容 Unity中的多线程 要记住关闭 Unity中去使用 如果说 我们一开始在Start内创建一个多线程 那么我们无法