使用WebBrowser控件的形式,说实话这种还算是比较靠谱的,以前也这么干过类似的事情;后来搜到一篇帖子说是可以使用U3D WebPlayer控件,抱着试试看的想法,新建了一个winform应用,在工具箱里面还真找到了UnityWebPlayer Control这么一个控件:
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://img2.ph.126.net/i9OavgaYG84Ockj2_fdwVA==/3334071099237880280.jpg)
将它拖到form上以后,发现属性很少,大部分都是Control的属性,不过还是发现了一个很重要的属性:src,这里将发布的web包地址写进去,运行一下,奇迹出现了,竟然出现了三维场景界面。。。![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://b.bst.126.net/common/portrait/face/preview/face25.gif)
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://img2.ph.126.net/qI2naRCYwI37js_gLtPc1g==/6597447998657128610.jpg)
请忽略三维场景内容,实在是拿不出手哇![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://b.bst.126.net/common/portrait/face/preview/face12.gif)
这里留一个问题:.unity3d 文件的路径只能在设计时的属性窗口直接赋值,在Form的构造函数或者Load事件中赋值都没有效果,具体原因还没找到。
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://img0.ph.126.net/mxZ5COMBBHtsyU5-NefKDQ==/3401906568625147164.jpg)
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://img2.ph.126.net/i9OavgaYG84Ockj2_fdwVA==/3334071099237880280.jpg)
将它拖到form上以后,发现属性很少,大部分都是Control的属性,不过还是发现了一个很重要的属性:src,这里将发布的web包地址写进去,运行一下,奇迹出现了,竟然出现了三维场景界面。。。
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://b.bst.126.net/common/portrait/face/preview/face25.gif)
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://img2.ph.126.net/qI2naRCYwI37js_gLtPc1g==/6597447998657128610.jpg)
请忽略三维场景内容,实在是拿不出手哇
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://b.bst.126.net/common/portrait/face/preview/face12.gif)
这里留一个问题:.unity3d 文件的路径只能在设计时的属性窗口直接赋值,在Form的构造函数或者Load事件中赋值都没有效果,具体原因还没找到。
这样的话算是实现了之前的需求:将U3D和Winform结合,不过winform的控件如何和U3D进行交互呢?再看一下UnityWebPlayerClass类的定义,发现有一个SendMessage方法,和U3D自身脚本的SendMessage定义一样。
![C WinForm程序中使用Unity3D控件 - 哈哈人 - 沈阳维展科技 C WinForm程序中使用Unity3D控件 - neil.wyh - 谁主沉浮](http://img0.ph.126.net/mxZ5COMBBHtsyU5-NefKDQ==/3401906568625147164.jpg)
下面首先在U3D中创建一个C#脚本,添加一个非常简单的函数:
void Down()
{
transform.Translate( Vector3.down * Time.deltaTime );
}
将脚本拖到叫做Sphere的对象上面。然后在窗体上添加一个按钮,在按钮的click事件中调用上面定义的方法:
axUnityWebPlayer1.SendMessage( "Sphere", "Down", null );
再次运行,不停地点击按钮,就可以看到小球缓慢往下移动的效果了。
经过上面的尝试,总算是初步解决了U3D和Winform(WPF也类似)集成的问题,不过核心的对象控制代码还是得在U3D中写好、编译才行,winform只是提供了一个更为习惯的UI而已。不知道是否还有更好、更方便、更强大的方法,期待。。。