基于Unity的编辑器开发(二): 进程间通信

本文介绍了如何在Unity编辑器开发中实现进程间通信(IPC),包括共享代码库、选择合适的通信方式(如 NamedPipe 和 NNanomsg)以及自定义轻量级过程调用(LPC)协议。通过这些技术,可以实现Unity与Winforms编辑器之间的高效交互和数据同步。
摘要由CSDN通过智能技术生成

共享代码

首先要做的, 是需要编辑器和Unity共享一部部分代码, 至少协议定义和解析我不想写两遍. 虽然有protobuf这样的工具库, 但是如果不是跨语言的话, 我觉得没必要引入另一套流程. 所以我就想能不能让一个C# dll库可以同时被Winforms的编辑器和Unity脚本引用呢? 考查了一下还是可以的:

  • Unity的.Net默认是Subset, 需要改成全的
  • Unity的.Net默认是C#3.5版本兼容的, 一些新的语法(如async)不支持
  • Unity中如果要引用Visual Studio编译出来的C# dll, 需要把Target framework改成”Unity 3.5 .net full Base Class Libraries”
  • 把VS编译出来的dll, 拷到Unity的Asset目录, mono脚本里就可以直接引用了

同时, 编辑器这边也需要知道一些游戏的数据类型和接口的定义, 实验了一下, UnityEngine.dll, Assembly-CSharp.dll, Assembly-CSharp-firstpass.dll可以直接被VS这边的C#工程引用, 只要不执行Unity特有的方法(会报”ECall 方法必须打包到系统模块中”的异常), 就可以在Winforms工程中安全地复用游戏脚本中的代码了.

经过这样的设置, 编辑器和Unity游戏可以共享一个dll库, 从代码上做到了共享, 这就为我们的代码复用和通信协议定义提供了基础保障.

进程间通信

为了达成这一通信需求, 首先做了一些搜索:

总结下来, 要么是基于NamedPipe, 要么是基于Socket.
尝试使用Full Duplex Asynchronous Read/Write

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值