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 (メインスレッドのようです) を取得しますが、同じエラーが再び発生します。