logo资料库

WinForm和Unity3d互操作.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
一、Winform嵌入Unity场景
二、
一、 Winform 嵌入 Unity 场景 最近有个项目用 Winform 开发,但是需要嵌入 Unity 的场景来增色,稍微研究了一下。 首先,VS →Tools→Choose Toolbox Items,找到 UnityWebPlayerControl 勾选上, OK。 然后可以在 toolbox 中找到并加入 form 中:
更改该控件的 src 属性,其余属性可以慢慢研究,这里 src 是 unity 发布网页版后的 “.unity3d”文件,例如: "file:\\C:\Users\eHong\Desktop\Test\Test.unity3d",这样就可以在 form 中加入 unity 的场 景:
两者的交互必不可少,form 向 unity 发送消息的机制是 sendmessage: axUnityWebPlayer1.SendMessage("Main Camera", "ChangeInfo", textBox1.Text); 这个大家应该都懂的,效果如下:
而 unity 向 form 发送消息则是以 ExternalCall 的方式实现,具体如: Application.ExternalCall("StringFun", testStr); 而 VS 这边的接收是 private void axUnityWebPlayer1_OnExternalCall(object sender, AxUnityWebPlayerAXLib._DUnityWebPlayerAXEvents_OnExternalCallEvent e) {} 这个是双击 unitywebplayer 的控件自动生成的相应函数,当然也可以自己写,当 Unity 发送消息时,这边收到的是一个字符串: e.value = "StringFun(\"这个是 Unity\");" 可以用委托或反射甚至判断字符串来调用不同的函数,最终结果如下:
最后有个问题没有解决,Unity 载入的 logo 不知道如何替换,现在只能做到加载时隐藏 控件,加载好之后再显示。
二、 Unity3D 引用 dll 打包发布问题 今年我们开始使用 Unity3D 开发 MMORPG,脚本语言使用 C#,这样我们就可以使用以往积 累的许多类库。但是,在 U3D 中使用.NET dll 的过程并不是那么顺利,比如我们今天遇到的这 种问题。 一.问题出现 我们在当前的一个 U3D 项目中使用了 StriveEngine 作为通信组件与服务端进行通信,在 U3D 环境中,编译运行一切正常,但在打包发布(Build)为 PC 版本可执行文件时,却出现错误: “ArgumentException: The Assembly System.Management is referenced by StriveEngine. But the dll is not allowed to be included or could not be found.” 最初,我以为是签名或者是加密混淆的问题,于是我使用原始编译生成的 StriveEngine.dll, 问题一样存在。 接着,我再猜测可能是 StriveEngine.dll 编译时选择平台的问题,于是把目标平台由 anycpu 更改为 x86,重新生成 StriveEngine.dll,并且在 u3d 打包发布也选择 x86,如下图所示: 但是,问题依然存在。 二.解决方案 经过一番折腾,终于发现需要设置一下 U3D 所使用的.NET 版本 -- 点击 Player Settings 按 钮,找到 Api Compatibility Level 选项,选择".Net 2.0",而非".Net 2.0 Subset",如下图所 示:
这个选项的意思是说,要使用.NET 2.0 的完整版本,而非其子集。经过此设置,终于可以打包 发布成功。 究其原因,看来是因为 StriveEngine 所使用的是完整版本.NET 2.0。 三.又现困境 由于我们的游戏会打算发布一个轻量级的 Web 版本,于是,我们尝试将其打包发布为 Web 版,god,同样的问题又出现了,而且,在发布 Web 版本的情况下,Api Compatibility Level 是不可选择的。 猜测发布 Web 版本只能使用.Net 2.0 Subset。 四.如何走出困境? 如果发布 Web 版本就只能使用.Net 2.0 Subset 这个猜想是正确的,那么,我想基于.Net 2.0 Subset 开发一个 StriveEngine.U3D.dll,使其可以被打包发布到各种不通类型的平台。可 是,.Net 2.0 Subset 具体指的是哪个子集了?是.NET Compact Framework?还是 SilverLight 提供的.NET Framework?抑或是其它?望知道的童鞋能留言告诉一下。
分享到:
收藏