0

私は、リモート クライアントを操作する必要がある Unity プロジェクトに取り組んでいます。インターフェイス クラスを作成し、別の Unity プロジェクトでリモーティング サーバーを使用しています。

サーバーは問題なく動作していますが、クライアントの作成は次の例外で失敗します。

System.TypeInitializationException: System.Runtime.Remoting.Channels.SocketCache の型初期化子によって例外がスローされました ---> System.NotImplementedException: 要求された機能は実装されていません。System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject、System.Threading.WaitOrTimerCallback callBack、System.Object 状態、TimeSpan タイムアウト、ブール値の executeOnlyOnce) [0x00000] で:0

クライアント用の私のコード:

MyRemotableObject remoteObject;

void Awake ()
{
    try
    {
        TcpChannel chan = new TcpChannel();
        ChannelServices.RegisterChannel(chan, false);
        remoteObject = (MyRemotableObject)Activator.GetObject(typeof(MyRemotableObject), "tcp://localhost:124/TargetShooterMenu");
    }
    catch (Exception e)
    {
        Debug.LogError(e.ToString());
    }
....

この問題を解決する方法を知っている人はいますか?Mono FAQによると、Mono はリモーティングをサポートする必要があります。Windows 7 x64 Professional マシンで Unity 3.5.1 (Mono 2.6.3 が必要です) を使用しています。

前もって感謝します

4

2 に答える 2

1

私はUnityを使ってまったく同じことをしています。

最初に行う必要があるのは、プレーヤーの Api 互換性レベルを「.Net 2.0 サブセット」から「.Net 2.0」に変更することです。

次に、MonoDevelop から 2.0 mono ライブラリ "System.Runtime.Remoting.dll" を取得する必要があります。

私は「/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Libraries/mono/2.0/System.Runtime.Remoting.dll」にありました

それを「Assets/Plugins」フォルダーに配置すると、Unity が残りのライブラリーをドラッグアウトします。

それ以降、リモーティングは問題なく機能しているようです:)

Remoting dll を追加し、「しかし、dll を含めることが許可されていないか、見つかりませんでした」のようなエラーを見つけるためだけにビルドすると、まだ「.Net 2.0 サブセット」を使用しています

于 2013-10-24T00:01:09.797 に答える
0

ここには 2 つのオプションがあります。

  1. 使用されている .NET サブセットはそれをサポートしていません。プレーヤー設定で 2.0 サブセットとフル 2.0 を切り替えて、もう一度テストします。
  2. それでも解決しない場合は、独自のプロトコルを実装するか、DLLImport を使用して真のネイティブ コードにする以外に、何もできないのではないかと心配しています。ここでの問題は、Unity では通常は無効化され、カスタム Mono バージョン (Mono 2.6 に基づく) から切り離されている安全でないコードへの依存です。Unity はシステムの Mono バージョンをサポートも使用もしていないため、それらに基づくテストや仮定は、この状況では無関係です。
于 2013-05-02T21:00:28.097 に答える