对于在Unity中专门研究此难题的人来说,这一点很重要,
请确保看到我问的另一个问题,它提出了相关的关键问题:
对于C#专家,Unity是单线程的1
通常在另一个线程上执行计算等。
当您在另一个线程上执行某些操作时,经常会使用async / wait,因为,所有好的C#程序员都说这是简单的方法!
void TankExplodes() {
ShowExplosion(); .. ordinary Unity thread
SoundEffects(); .. ordinary Unity thread
SendExplosionInfo(); .. it goes to another thread. let's use 'async/wait'
}
using System.Net.WebSockets;
async void SendExplosionInfo() {
cws = new ClientWebSocket();
try {
await cws.ConnectAsync(u, CancellationToken.None);
...
Scene.NewsFromServer("done!"); // class function to go back to main tread
}
catch (Exception e) { ... }
}
好的,因此,当您执行此操作时,在Unity / C#中以更常规的方式启动线程时,您将做所有事情,就像“通常一样” (因此使用Thread或其他方法,或者让本机插件执行它,或OS或其他方法)可能是这样)。
一切顺利。
作为一个la脚的Unity程序员,他只知道足够的C#来解决问题,我一直认为上面的async / await模式实际上会启动另一个线程。
实际上,上面的代码是从字面上启动另一个线程的,还是在使用natty异步/等待模式时c#/。Net是否使用其他方法来实现任务?
它在Unity引擎中的工作方式可能与“一般使用C#”有所不同或不同?(IDK?)
请注意,在Unity中,它是否是线程会极大地影响您处理后续步骤的方式。因此是一个问题。
问题:我意识到关于“正在等待线程”的讨论很多,但是,(1)我从未在Unity设置中看到过讨论/回答过的内容(它有什么区别吗?IDK?)(2)我从来没有看到一个明确的答案!
1 一些辅助计算(例如,物理等)是在其他线程上完成的,但是实际的“基于框架的游戏引擎”是一个纯线程。(无论如何都无法“访问”主机框架线程:例如,在对本机插件进行编程或在另一个线程上进行某种计算时,您只需在引擎框架线程上留下组件的标记和值即可查看和在每帧播放时使用。)
我不喜欢回答自己的问题,但事实证明,这里没有一个答案是完全正确的。(但是,这里的许多/所有答案在不同方面都非常有用)。
实际上,可以简单地说出实际答案:
SynchronizationContext.Current
。而已。
因此,在任何特定版本的Unity中(请注意,截至2019年撰写时,他们正在彻底改变Unity- https://unity.com/dots)-或实际上是任何C#/。Net环境-此页面上的问题可以正确回答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句