ユニティでは、スレッドはtransform.positionなどのようにUnityEngineが提供するオブジェクトを操作できません。このため、get_transformはメインスレッドからのみ呼び出すことができます。 しかし、これらのメソッドは、BeginReceiveのような非同期関数で使用することができます。非同期関数はスレッドまたはsth以外ではありませんか?ユニティのスレッドセーフ
私は以下のコードを試してみてください。
void Start(){
AsyncCallback callback = new AsyncCallback (demo);
callback.BeginInvoke (null, null, null);
}
void demo(IAsyncResult result){
Debug.Log(Thread.CurrentThread.ManagedThreadId);
Debug.Log(gb.transform.position.ToString());
}
私はユニティ・エディタでコードを実行したときにそれが例外をスローしません。しかし、このコードをAndroidの携帯電話で直接実行すると、例外がスローされず、コードが正しく実行されました。
Line 13497: 02-20 14:37:49.973 31027 31697 I Unity : 3
Line 13501: 02-20 14:37:49.975 31027 31697 I Unity : (0.0, 0.0, 0.0)
だから、機能ではなく、メインスレッドの別のスレッド上で動作するようですので、誰が、なぜこのような状況に作品を変革私に言うことができる:
applogcatでログがあることを示して?
"BeginReceiveのような非同期関数で" C#には多くの非同期関数があります。あなたはどちらを試しましたか?あなたは別のスレッドを使う必要がありますか? – Programmer
BeginReceiveはスレッドでなければならないのですが、UnityEngineが提供するメソッドを使うことができ、例外もありません。 – deadmarston
BeginReceiveどこから?どのクラス?さまざまなC#API /クラスの多くがあります。 – Programmer