2014-10-27 86 views
0

我正在研究Unity3D應用程序,該應用程序基本上從服務器獲取數據並嘗試在運行時創建對象。當我試圖創建該對象,通過對我定義一些類構造函數,我得到以下錯誤:在運行時創建對象

get_name can only be called from the main thread. 
Constructors and field initializers will be executed from the loading thread when loading a scene. 
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function 

我不能把這移動到任何醒着還是開始,因爲我需要一些反饋我運行所提到的代碼之前我的GUI(用戶憑據)。

任何意見/建議?

+0

如果您需要憑據,爲什麼將邏輯放入構造函數中?將代碼移動到自定義方法中,並在用戶執行所需操作並調用其輸入時調用它 – 2014-10-27 15:42:56

+0

位於類的構造函數中我試圖實例化,而不是場景的構造函數等。對於混淆,抱歉。 – javydreamercsw 2014-10-27 16:24:32

回答

0

我能夠使它工作。下面是我所做的一個總結:

  1. 使類在運行時實例化類,稱爲Creator,擴展爲ScriptableObject。這允許使用CreateInstance按需啓動創建者類。
  2. 將創建者類的方法,變量和類本身更改爲靜態。
  3. 需要時通過CreateInstance對Creatorclass進行仿真。
  4. 確保從適當的地方開始,喚醒或更新調用類實例化的方法。在我的情況下,這是更新。
1

你不能在你的構造函數中創建對象,否則你會得到那個錯誤。實際上,你應該避免使用Unity的構造函數,並支持Awake/Start /等。

我不知道你在做什麼,但沒有理由不能在代碼中的某個地方實例化()對象,在代碼的下一行正確設置它,然後讓它醒來()/ Start()之後,讓它完全初始化。

+0

這些類基本上是指數據結構。 – javydreamercsw 2014-10-28 19:00:18

+0

如果他們只是數據結構,不要讓它們從MonoBehavior下降。相反,只要讓它們成爲自由浮動類,確保將[Serializeable]屬性標記放在它們上面,並從單聲道行爲中引用它們。您可以正常使用構造函數。 – 2014-10-30 20:08:38

+1

他們不是MonoBehavior的後代。有關我如何修復它的詳細信息,請參閱我的答案。 – javydreamercsw 2014-10-30 22:00:33