当前位置:网站首页>Unity update process_ Principle of unity synergy
Unity update process_ Principle of unity synergy
2022-07-04 15:07:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm your friend, Quan Jun .
Unity The principle of CO process
Release time :2019-06-13 18:45,
A coroutine is not multithreaded , The coroutine is still in the main thread ( notes : stay Unity The Central African main thread is not accessible Unity Resources )
1、 Threads 、 The difference between process and coroutine
The process has its own independent heap and stack , Neither heap nor stack is shared , Processes are scheduled by the operating system
Threads have their own independent stacks and shared heaps , Shared heap does not share stack , Threads also have operating system scheduling ( Standard threads are like this )
Coroutines share heaps and not stacks like threads , The programmer displays the schedule in the code of the coroutine
An application generally corresponds to a process , A process usually has a main thread , There are also several worker threads , Threads are parallel , You can start a coroutine in a thread , Let the program run at a specific time .
The difference between a coroutine and a thread is : The process avoids meaningless scheduling , This can improve performance , But it is also so , Programmers have to take responsibility for scheduling themselves , meanwhile , Coroutines also lose the standard thread usage CPU The ability of .
2、Unity The principle of intermediate process execution
Put one on first unity Frame operation diagram of the main line :
stay Unity Runtime , Calling a coroutine is just starting a IEnumerator( iterator ), The process begins to run , In carrying out the yield
return There was no difference from other normal procedures , But when it comes to yield
return And I'll be back immediately , And suspend the function temporarily . In the next frame FixedUpdate perhaps Update After judgment yield return
Whether the following conditions are satisfied , If satisfied, execute downward .
according to unity We know the main frame diagram , Collaborative programs are mainly in update() After method ,lateUpdate() Call before method .
Unity The impact of the life cycle on the process :
By setting MonoBehaviour The script enabled There's no impact on Xiecheng , But if gameObject.SetActive(false)
Then the started coroutine stops completely , Even in Inspector hold gameObject
Activation is still not continuing . In other words, although Xiecheng is MonoBehvaviour Starting up (StartCoroutine) But the position of coprogram function is completely related to MonoBehaviour It's a hierarchical , Not subject to MonoBehaviour The state of influence , But follow MonoBehaviour Scripts are just as popular as gameObject
control , It should also be with MonoBehaviour Script like every frame “ polling ” yield Whether the conditions of .
notes :WaitForSends() suffer Time.timeScale influence , When Time.timeScale = 0f when ,yieldreturn new
WaitForSecond(X) Will not be satisfied .
3、 The main applications of coprocessing are
The coroutine can't just do some simple delays , If you simply pause for a few seconds and then execute, there is no need to start a thread .
The real function of coprocessing is to do some time-consuming things step by step , For example, loading resources in the game
using System.Collections; using System.Collections.Generic; using
System.Threading; using UnityEngine; public class Test : MonoBehaviour {
private int num = 0; void Start() { StartCoroutine(Test1()); } IEnumerator
Test1() { while (num < 30) { num++; Debug.Log(num); yield return null;
Debug.Log(“————-” + num); } } void Update() { Debug.Log(“update” +
num); } void LateUpdate() { Debug.Log(“lateUpdate!” + num); } }
The above example is very simple: loading 30 Objects , If it is loaded at one time, it will get stuck , Influence the game experience . This is how we can use the synergy , The co process is every frame LateUpdate Before execution yield
return Previous code ,LateUpdate After performing yield return
Later code ( You can see from the above small example ). In this way, we can load one per frame until the loading is completed , There will be no Caton .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/149432.html Link to the original text :https://javaforall.cn
边栏推荐
- 5g TV cannot become a competitive advantage, and video resources become the last weapon of China's Radio and television
- Kubernets Pod 存在 Finalizers 一直处于 Terminating 状态
- Redis publish and subscribe
- Redis 发布和订阅
- LVGL 8.2 text shadow
- Redis的4种缓存模式分享
- Openresty redirection
- Deep learning 7 transformer series instance segmentation mask2former
- 如何配和弦
- Redis哨兵模式实现一主二从三哨兵
猜你喜欢
Quick introduction to automatic control principle + understanding
各大主流编程语言性能PK,结果出乎意料
Leetcode 1200 minimum absolute difference [sort] The Path of leetcode for heroding
Guitar Pro 8win10 latest guitar learning / score / creation
Redis publish and subscribe
Guitar Pro 8win10最新版吉他学习 / 打谱 / 创作
They are all talking about Devops. Do you really understand it?
夜天之书 #53 Apache 开源社群的“石头汤”
Halo effect - who says that those with light on their heads are heroes
现代控制理论入门+理解
随机推荐
产品好不好,谁说了算?Sonar提出分析的性能指标,帮助您轻松判断产品性能及表现
Intelligent customer service track: Netease Qiyu and Weier technology play different ways
宽度与对齐
LeetCode 1200 最小絕對差[排序] HERODING的LeetCode之路
Halo effect - who says that those with light on their heads are heroes
What are the concepts of union, intersection, difference and complement?
C1 certification learning notes 3 -- Web Foundation
Redis publish and subscribe
自动控制原理快速入门+理解
Flutter reports an error no mediaquery widget ancestor found
CentOS 6.3 下 PHP编译安装JSON模块报错解决
flutter 报错 No MediaQuery widget ancestor found.
Five minutes of machine learning every day: how to use matrix to represent the sample data of multiple characteristic variables?
PLC Analog input analog conversion FC s_ ITR (CoDeSys platform)
深度学习 神经网络案例(手写数字识别)
selenium 浏览器(2)
找数字
各大主流编程语言性能PK,结果出乎意料
暑期复习,一定要避免踩这些坑!
从0到1建设智能灰度数据体系:以vivo游戏中心为例