我在 unity3d 控制台中收到这样的错误:
INTERNAL_CALL_Internal_InstantiateSingle 只能从主线程调用。加载场景时,构造函数和字段初始化程序将从加载线程中执行。不要在构造函数或字段初始化程序中使用此函数,而是将初始化代码移至 Awake 或 Start 函数。
我正在尝试的是执行方法,它似乎在主线程中定义,如“Instantiate()”
如何调用此方法或调用主线程来执行它?
编辑
protected static void processCommand(String data) {
...
} else if(data.StartsWith("LOGGEDIN")) {
...
Vector3 pos = new Vector3(0, 1.2F, 0);
Quaternion rot = Quaternion.identity;
myModel = (GameObject)Instantiate(player, pos, rot);
...
线程是:
Thread tidListen = new Thread(new ThreadStart(ListenThread));
tidListen.Start();
private static void ListenThread() {
while(connected) {
int lData = myStream.Read(myBuffer, 0, client.ReceiveBufferSize);
String myString = Encoding.ASCII.GetString(myBuffer);
myString = myString.Substring(0, lData);
processCommand(myString);
}
}
当我调用 processCommand 时,我有方法: Instantiate()
编辑 2
我也试过这个Link,当我从 currentThread 获得 ManagedThreadId 时,我得到 1 (这似乎是主线程),但我再次得到同样的错误。