Unityでプロセス間通信が難しい
About
名前付きパイプで通信するのがもっとも堅実なようです。名前付きパイプで通信することに成功しています。記事はその内。2013.04.30
いろいろあってUnityでプロセス間通信したかったのですが、手間かけた割にはできませんでした。同じ作業を2度しないためのメモです。方法が思いついたら別途解決で書きます。
- UDP/TCPによる通信はできました。
- データの送受信をする場合にはデコードする必要が出てきます。
- LINQを使って解決することも考えられます。
IPCがない
Microsoftの.Netではver2.0から実装されている"System.Runtime.Remoting.Channels.Ipc名前空間"があります。Ipc名前空間にある"IpcChannelクラス"などを用いて容易にプロセス間通信を実装することができるのですが、2013.02.12現在でUnityに積まれているMono(ver2.0)にはこの名前空間(とその下のクラス)がありません。
さらに"System名前空間"には"System.Activatorクラス"もないのです。よってこれらを用いてWindows上の.netで簡単に実装されるプロセス間通信はそのままではあつかえません。
そこでインストールした.NetFrameworkのフォルダからDLLを拝借してpluginフォルダの中に投入する必要があります。しかしこんどはSystem名前空間が重複するわけです。名前空間Systemが重複するのは厄介です。また動作の安定を考慮するのであれば、強引な解決は避けた方が良いと思われるレベルで重要な名前空間です。この時点でほかの方法を考えることにしました。
- 2013.02.12現在最新のUnity4.xでは、対応するMonoのバージョンは2.8.2となっています。
- MONOのSystem.Runtime.Remotung.dllのバージョンは2.0です。
それでも強引に
進めようと思うと次のエラーを解決しなければなさそうなのでメモだけ残しておく。
- TypeLoadException:Could not load type…
- RemotingException:Channel ipc is not securable…