unity进程间通信
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。 blog.csdn/u011017980/article/details/52454212
在windows系统上,进程间通信是⼀种很古⽼,很成熟的技术了,但是遇到unity这种技术就有点不好使了。最近项⽬需要进程间通信,我试了很多⽅法就是不好使,最后只能⽤socket。我⽤到的通信⽅式有以下⼏种:
⼀、管道通信,命名管道在⾥可以做全双⼯通信,但是到unity⾥只能是单⼯通信。还是只能完成收,时不时的收到空消息。
⼆、消息队列,这种⽅式纯粹是不好使。
三、IPC通道的⽅式,在 unity⾥⼀运⾏就报错进程通信方式
错误如下:
InvalidProgramException: Invalid IL code in System.Runtime.Remoting.Channels.Ipc.IpcClientChannel:get_ChannelName (): IL_0000: ret
四、调⽤windwsAPI,做共享内存的⽅式,有⼈会说C#已经封装了共享内存的⽅式,不⽤调⽤windowsAPI,你得明⽩unity只⽀持3.5的版本。C#封装共享内存是 4.0出的。所以必须采⽤原⽣的⽅式。但是在调⽤windowsAPI 的时候数据能发到unity⾥边,unity向别的进程发数据,数据就收不到了 。
五、RPC这种⽅式有点扯了对于unity来说。
六、利⽤消息钩⼦,进⾏进程间通信,这种⽅式有点⿇烦的是必须得知道对⽅窗体的名字。不然钩⼦⽆从下⼿,我嫌这种⽅式⿇烦,所以我也舍弃了。
七、说道最后,⼤家都能猜到我⽤什么⽅式了 ,unity在怎么阉割,他的通信⽅式还是要有的,那就是socket,在同⼀台机器上做udp的定向通信,这样就解决了unity进程间的通信。
最近在做项⽬的时候发现还有⼀种⽅式可以做到进程间通信,这种⽅式⽐较古⽼,对于unity来说是⼀种⾼效的⽅式,那就是内存共
享,unity虽说⽀持 ,但是只⽀持2.0的阉割版,在C# 6.0⾥已经封装了内存共享,使⽤还是⽐较⽅便的,但是unity不⽀持,所以对于unity我们就得⽤c++封装⼀次,暴露接⼝,然后pinvoke调⽤,这样就可以使⽤了这个dll。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论