Unity FixedUpdate 与 Update 的线程关系实验
先上结论:FixedUpdate 与 Update 在同一个线程上。
实验过程:
1、打印 FixedUpdate 和 Update 的线程编号
void FixedUpdate ()
{
Debug.Log ("FixedUpdate => " + Thread.CurrentThread.ManagedThreadId);
} void Update ()
{
Debug.Log ("Update => " + Thread.CurrentThread.ManagedThreadId);
}
得到结果如下:

由此可见,FixedUpdate 和 Update 是运行在同一个线程上的。这样我们在处理 FixedUpdate 的时候,就不需要考虑和 Update 之间线程同步的问题了。
2、再来,我们把 FixedUpdate 帧率调低到 1 秒

结果同样是在一个线程上
3、我们再做个坏事,先把 FixedUpdate 的帧率调回到 0.02,然后在 FixedUpdate 的时候执行 Thread.Sleep(1000)
void FixedUpdate ()
{
Debug.Log ("FixedUpdate => " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
} void Update ()
{
Debug.Log ("Update => " + Thread.CurrentThread.ManagedThreadId);
}
再执行的时候发现——Update 也同时被 FixedUpdate 阻塞了,整个 Unity 软件的 UI 都一卡一卡的……
4、再来,我们不睡 FixedUpdate 了,换成睡 Update
void FixedUpdate ()
{
Debug.Log ("FixedUpdate => " + Thread.CurrentThread.ManagedThreadId);
} void Update ()
{
Debug.Log ("Update => " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep ();
}
看看结果

线程唤醒后,Unity拼命的执行 FixedUpdate,然后再执行一次 Update。
由此可以猜想:Unity 在整个生命周期中可能建了一个托管代码执行队列,通过生命周期管理器往这个队列中添加执行方法的 delegate,然后启动一个托管线程循环的取队列中的方法(delegate)并执行。
希望这个实验对您有帮助。
Unity FixedUpdate 与 Update 的线程关系实验的更多相关文章
- unity中的update、Lateupdate和FixedUpdate。
MonoBehaviour.Update 更新 当MonoBehaviour启用时,其Update在每一帧被调用. MonoBehaviour.FixedUpdate 固定更新 当MonoBehavi ...
- 关于unity中的update、Lateupdate和FixedUpdate
MonoBehaviour.Update 更新 当MonoBehaviour启用时,其Update在每一帧被调用. MonoBehaviour.FixedUpdate 固定更新 当MonoBehavi ...
- Unity进阶----AssetBundle_02(加载依赖关系及网络资源)(2018/10/31)
网络资源加载: string path ="file://"+ Application.streamingAssetsPath + "\\windows\\123&quo ...
- 线程让出实验【RT-Thread学习笔记 4】
API: rt_thread_yield 线程函数中调用,本线程释放MCU.如果此时有别的相同优先级的任务整处于等待状态,将获得MCU使用权. 线程让出就是给OS增加一个任务调度的机会. 创建两个线程 ...
- Java Swing paint repaint update 方法的关系
Java Swing paint repaint update 方法的关系: 参考:http://blog.csdn.net/xiaoliangmeiny/article/details/691665 ...
- Java多线程父子线程关系 多线程中篇(六)
有的时候对于Java多线程,我们会听到“父线程.子线程”的概念. 严格的说,Java中不存在实质上的父子关系 没有方法可以获取一个线程的父线程,也没有方法可以获取一个线程所有的子线程 子线程的消亡与父 ...
- Unity中让Update中的方法执行一次
Unity中让Update中的方法执行一次 Unity中,很多时候,代码需要放在Update中时刻监测状态,一旦状态符合,又只需要代码执行一次:其实可以通过设置控制量的方式,让代码只执行一次:方法:设 ...
- Unity 脚本中update,fixedupdate,lateupdate等函数的执行顺序
结论 通过一个例子得出的结论是:从先到后被执行的函数是 Awake->Start->FixedUpdate->Update->LateUpdate->OnGUI. 示例 ...
- Unity主线程和子线程跳转调用(1)
Unity除了一些基本的数据类型,几乎所有的API都不能在非unity线程中调用,如果项目中有一段很耗时操作,unity可能会出现“假死”.如果这段操作是和unity无关的,我们可以把这个耗时的操作放 ...
随机推荐
- The type R is already defined 错误解决办法
今天在导入一个开源项目的时候遇到了The type R is already defined的错误,试过了删除R,clear project都还是报这个错,Google一下之后找到了解决办法在 Pro ...
- WebGL 初探
官方网站:http://webglfundamentals.org/ WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenG ...
- Remove Duplicates from Sorted List II 解答
Question Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only dist ...
- error LNK2019
error LNK2019: 无法解析的外部符号 "public: virtual __thiscall Fruit::~Fruit(void)" (??1Fruit@@UAE@X ...
- zoj 3471 Most Powerful(状态压缩dp)
Recently, researchers on Mars have discovered N powerful atoms. All of them are different. These ato ...
- Python 面向对象基础
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
- [AC自动机][HDU3065]
//====================== // HDU 2222 // 求目标串中出现了几个模式串 //输入 //1 //5 //she //he //say //shr //her //ya ...
- Gridview 多重表头 (二)
多重表头之排序 这是个有点忧桑的故事...Cynthia告诉我,研究一个问题,我们不可能有超过一天的时间... 结果好好几天过去鸟~~还没有完成... 由于不再使用Gridview自带的表头行,于是无 ...
- C#的简单的Windows Service 创建与安装
注意事项: 1. 添加调试代码 入口: 服务: 2. 再服务界面右键添加安装程序 3. 修改安装程序属性(Account) 4. 修改服务安装属性(DelayedAutoStart,ServiceNa ...
- android 数据存储之SharePreference 的几种方式
1. 常见的 getSharedPreferences(String filename,mode) 指定sp文件的名称,生成的文件名为 filename.xml 2.getPreferences(mo ...