私のアプリケーションでスレッド化に問題があります。私はマルチスレッドクライアント/サーバーアプリケーションを持っています。 Unity3dにはC#MonoDevelopも使用しています。答えに違いがあるかどうかは不明です。私は自分の問題がどこにあるのか説明しようとします:C#他のスレッドでコードを実行
Unityは単一のスレッドで動作します。だから抽象クラスScriptableObject
を使用してオブジェクトをインスタンス化したい場合は、これをUnityが動作するメインスレッドで行う必要があります。
私のサーバーソケットは接続されているすべてのクライアントのスレッドを生成します。そのため、受信データを非同期に処理できます。受信データが(それ自身のスレッド上で実行される)OnDataReceived()
方法
で処理され、ここでの問題は、私はOnDataReceived()
スレッド内部Player
オブジェクトのインスタンスを作成することができないということです。私のPlayer
オブジェクトはScriptableObject
から継承されています。これは、このオブジェクトがメインのUnityスレッド上に作成されるべきであることを意味します。
しかし、私はそれを行う方法がわかりません...メインスレッドに戻る方法はありますか?私はまだオブジェクトをOnDataReceived()
メソッドで作成できますか?
あなたはUbity3dは、あなたが別のスレッドで作成されたオブジェクトを使用させませんか? –
@HenkHolterman私は100%確信していませんが、それはそれのように見えます。他のメソッド/クラスでPlayerをインスタンス化すると、すべて正常に動作します。しかし、私は私のソケットクラス(別のスレッドで実行されている)からそれをしようとすると、エラーをスローする - >ファイルのエラー:MonoManager。cpp at line:2212 ---それはすべて私が得る。だから、これは別のスレッドでしか起こらないので、それが問題だと私は思った。 – w00
Unity3Dでは、スレッド間で変数を使用できます。競争状態のように聞こえる。 – Kay