概念
- Unity主线程:为保证数据安全,Unity核心的游戏逻辑全部都是在一个线程里完成,即Unity主线程
- 帧循环:在主线程上运行一次完整的游戏逻辑, 称为完成一次帧循环。
注意
- 一个逻辑帧通常指一次包含了以Update()为主的循环调用过程。因为我们游戏的逻辑大部分都是在Update()里面
- 一个逻辑帧里面可能包含了多次FixedUpdate()的调用。
- Unity中是可以使用多线程的,但需要注意在Unity里一些关键性的数据在其它线程是不能访问修改的。
private void Start()
{
ThreadStart threadStart = new ThreadStart(ThreadMain);
Thread thread = new Thread(threadStart);
thread.Start();
Debug.Log("UnityMain线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());
}
private void ThreadMain()
{
Debug.Log("New线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());
//运行会报错:get_transform can only be called from the main thread.
Debug.Log(transform.gameObject.name);
}
Unity限制使用多线程的原因
为何还能保持高效率的运行?
- Unity在底层实现了线程池,引擎底层来实现一些可使用多线程处理的任务。