帧循环和主线程

概念

  • 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在底层实现了线程池,引擎底层来实现一些可使用多线程处理的任务。
posted @ 2019-11-17 14:21  爱学习的刘某某  阅读(426)  评论(0编辑  收藏  举报