【精华】Unity3d嵌入到WinForm

分类: 三维 |
一、Unity嵌入到WinForm
二、unity发布成exe,然后再Winform中调用exe
1、Unity发布成WebPlayer
2、WinForm中查找控件
添加后,工具箱会发现控件:
控件src属性赋值:F:\Web
Publish\Desktop.unity3d
运行程序,即可看见效果。
将U3D和Winform结合,不过winform的控件如何和U3D进行交互呢?再看一下UnityWebPlayerClass类的定义,发现有一个SendMessage方法,和U3D自身脚本的SendMessage定义一样。
下面首先在U3D中创建一个C#脚本,添加一个非常简单的函数:
void Down()
{
.Translate( Vector3.down * Time.deltaTime ); transform
}
将脚本拖到叫做Sphere的对象上面。然后在窗体上添加一个按钮,在按钮的click事件中调用上面定义的方法:
axUnityWebPlayer1.SendMessage( "Sphere", "Down", null );
【好东西啊!】http://neil.wyh.blog.163.com/blog/static/3161151201361480843/
二、unity发布成exe,然后再Winform中调用exe
http://pcajax.iteye.com/blog/1540096
System.Diagnostics.Process.Start(@"D:\Program
Files\xxxx.exe");
三、动态加载
http://blog.csdn.net/qw_zr/article/details/41808895
在winform中如何嵌入unityed,请参考此帖
http://neil.wyh.blog.163.com/blog/static/3161151201361480843/但是该文中,并没有告诉如何动态设置src。这个src必须是绝对路径,而且只能在设计器进行设置,不能在代码中动态修改。这样造成的问题就是,unity3d文件必须是写死的,如果换一个路径就无效了,这样极不利于分布到其他电脑上。当然,如果这个src是http形式的,则不存在这个问题,如果是本地路径(比如c:\u.unity3d)则是个大问题。以下是解决方法,在4.5.5版本测试成功。
-
private
void InitUnity() -
{
-
var unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer(); -
((System.ComponentModel.ISupportInitialize)(unity)).BeginInit(); -
Controls.Add(unity); -
((System.ComponentModel.ISupportInitialize)(unity)).EndInit(); -
unity.src = Application.StartupPath + "\\u.unity3d"; -
AxHost.State state = unity.OcxState; -
unity.Dispose(); -
unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer(); -
((System.ComponentModel.ISupportInitialize)(unity)).BeginInit(); -
this.SuspendLayout(); -
unity.Dock = DockStyle.Fill; -
unity.Name = "Unity"; -
unity.OcxState = state; -
unity.TabIndex = 0; -
panel1.Controls.Add(unity); //panel1是我用的一个容器,改成this.Controls也可以 -
((System.ComponentModel.ISupportInitialize)(unity)).EndInit(); -
this.ResumeLayout(false); -
}
四、WPF嵌入unity3d
http://jingyan.baidu.com/article/25648fc1a331ce9191fd0004.html
前一篇:C# 打开Exe文件
后一篇:Unity3D 单位