2014-12-04 66 views
0

我正在使用自定義TCP套接字客戶端類連接到服務器。當服務器響應特定的消息/命令時,我想更改活動菜單,但Unity3D告訴我從其他線程訪問GameObjects,但主線程是不可能的。Unity3d從線程訪問GameObject:InternalGetGameObject錯誤

目前我正在使用使用blockin IO的接收線程。我嘗試使用BeginReceive接收消息並等待特定的命令,然後更改活動菜單,但它給了我同樣惱人的錯誤。

有沒有一個簡單而好的方法來解決這個問題?

回答

2

這是因爲您無法從其他線程訪問GameObjects。您可以在主線程中實現監聽器:

void Start(){ 
    StartCoroutine(CheckOtherThreadsEveryFrame()); 
    StartCoroutine(CheckOtherThreadsOnceASecond()); 
} 

IEnumerator CheckOtherThreadsEveryFrame(){ 
    while(true){ 
     //check if another thread has put some data where this method can see 
     yield return null; //wait until next frame  
    } 
} 
IEnumerator CheckOtherThreadsOnceASecond(){  
    while(true){    
     //check if another thread has put some data where this method can see   
     yield return new WaitForSeconds(1); //wait for 1 second 
    }