当前位置:网站首页>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
边栏推荐
- selenium 浏览器(2)
- They are all talking about Devops. Do you really understand it?
- Partial modification - progressive development
- Deep learning network regularization
- Preliminary exploration of flask: WSGI
- selenium 元素交互
- LVGL 8.2 LED
- Enter the width!
- Memory management summary
- [Dalian University of technology] information sharing of postgraduate entrance examination and re examination
猜你喜欢
韩国AI团队抄袭震动学界!1个导师带51个学生,还是抄袭惯犯
函数计算异步任务能力介绍 - 任务触发去重
产品好不好,谁说了算?Sonar提出分析的性能指标,帮助您轻松判断产品性能及表现
Halo effect - who says that those with light on their heads are heroes
leecode学习笔记-约瑟夫问题
Force button brush question 01 (reverse linked list + sliding window +lru cache mechanism)
深度学习 神经网络案例(手写数字识别)
程序员自曝接私活:10个月时间接了30多个单子,纯收入40万
Leetcode 1200 minimum absolute difference [sort] The Path of leetcode for heroding
LVGL 8.2 text shadow
随机推荐
【学习笔记】拟阵
[local differential privacy and random response code implementation] differential privacy code implementation series (13)
Five minutes of machine learning every day: why do we need to normalize the characteristics of numerical types?
Optimization method of deep learning neural network
hexadecimal
LVGL 8.2 Line wrap, recoloring and scrolling
Summary of common problems in development
Ffmpeg Visual Studio development (IV): audio decoding
[learning notes] matroid
Width and alignment
Luo Gu - some interesting questions 2
LVGL 8.2 Line
函数计算异步任务能力介绍 - 任务触发去重
深度学习 神经网络的优化方法
Summer Review, we must avoid stepping on these holes!
Ffprobe common commands
夜天之书 #53 Apache 开源社群的“石头汤”
LVGL 8.2 Draw label with gradient color
Five minutes per day machine learning: use gradient descent to complete the fitting of multi feature linear regression model
Introduction to asynchronous task capability of function calculation - task trigger de duplication