2014-10-27 75 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