在Unity中使用多線程


說起多線操作,很多人可能會在第一時間想到Coroutine協程。的確,協程是一種簡單好用的功能,但是除了協程之外,我們也可以使用C#自身的線程來完成一些工作。

在Unity中,使用線程的方法與普通的C#寫法別無二致。例如:

 1 public class ThreadTest : MonoBehaviour
 2 {
 3     void Start()
 4     {
 5         ThreadStart childRef = new ThreadStart(ThreadTest1);
 6         Thread childThread = new Thread(childRef);
 7         childThread.Start();
 8     }
 9 
10     public void ThreadTest1()
11     {
12         print("ThreadTest1 is working");
13     }
14 }

有一點需要注意,由於MonoBehaviour腳本是會自動實例化的,所以我們不需要通過new方法來生成實例。但是如果不是繼承自MonoBehaviour而僅僅是普通的C#文件,那就還得按照普通的C#的解決方法來添加static或者是new一個實例。

當程序運行時,可以看到線程正常的運行了。如圖:

但是在Unity中使用線程並不是沒有限制的,線程只能進行與Unity無關的工作,例如數據運算等。與Unity引擎相關的操作幾乎都會報錯,例如用線程控制物體移動就是一個無法實現的功能。在Unity中,所有與Unity相關的功能都只能夠在主線程中完成,子線程是無法直接做到的。

例如我嘗試使用線程控制一個GameObject的transform,代碼開發階段是沒有問題的,但是項目在運行后就會立刻報錯。如圖:

從錯誤信息中也可以看出,此類操作只能在主線程中進行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM