Unity3D与WinForm的通信总结
网上对于Unity3D与WinForm的通信文章不少https://www.cnblogs.com/cnxkey/articles/5394378.html,我对我最近在这方面所作的研究和应用做一个总结,供大家参考。
1 Unity3D
Unity3D由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director、Blender game engine、Virtools或Torque Game Builder等利用交互的图形化开发环境为首要方式的软件。其编辑器运行在Windows和Mac OS X下,可发布游戏至Windows、Mac、Wii、Iphone、WegGL(需要HTML5)、Windows
phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。
2 UnityWebPlayer
Unity开发网页游戏,发布的时候可以选择Web Player和WebGL。Unity5.4版本以后发布只能选择WebGL,WebPalyer能用的最高版本是5.3.8。
3 在WinForm程序中使用Unity3D控件
Unity3D虽然有自己的UI控件,但是有些时候开发人员还是希望能把Unity3D场景嵌入到WinForm中,以结果其他三维显示组件针对不同的需求使用不同的组件显示。WinForm是可以通过UnityWebPlayer控件和Unity3D发布的网页版进行通信的。
(1)安装和引入UnityWeb Player插件
需准备UnityWebPlayer的32位和64位(鉴于有些软件发布为64位的版本)两个版本,先安装32位,再安装64位。在程序中引入UnityWebPlayer的DLL文件。(2)在程序中添加Unity项目发布的网页版本:
(3)向Untiy项目发送消息:
m_unity.SendMessage("Quad_bird","NewFunc",null);
其中,"Quad_bird"为Unity中对象名;"NewFunc"为附在"Quad_bird"对象上的方法名;null为方法的输入参数.
(4)Unity项目对WinForm消息的反馈
在Unity脚本中,自定义一个发送消息事件(当鼠标单击时发出):
Public void OnMouseUp(){Application.ExternalCall("IP",aaa);} //向客户端发送消息
(5)WinForm通过UnityWebPlayer注册一个事件:publicevent _DUnityWeb PlayerAXEvents_OnExternalCallEventHandler
OnExternalCall即可接收到Unity项目发出的消息,如图:
4 Unity消息解译器
以上研究了Unity与WinForm之间的信息通信问题,这只能说明Unity和WinForm之间是能够进行消息交互的。要实现Unity和
WinForm之间比较一致的操作,还需要一个标准统一的“契约”(配置文件)。这个契约需要定义不同消息和字符的映射关系,
Unity和WinForm则通过这些字符来解译消息含义,其结构如下: