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项目发布的网页版本:
Unity3D与WinForm的通信总结_第1张图片
(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项目发出的消息,如图:
Unity3D与WinForm的通信总结_第2张图片

4 Unity消息解译器

以上研究了Unity与WinForm之间的信息通信问题,这只能说明Unity和WinForm之间是能够进行消息交互的。要实现Unity和
WinForm之间比较一致的操作,还需要一个标准统一的“契约”(配置文件)。这个契约需要定义不同消息和字符的映射关系,
Unity和WinForm则通过这些字符来解译消息含义,其结构如下:
Unity3D与WinForm的通信总结_第3张图片

你可能感兴趣的:(程序设计)