Unity3D可以C#脚本进行开,使用vstu2013.msi插件,可以实现在VS2013中的调试。在开发完成后,由于项目需要,需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。
一、为了能够动态设置axUnityWebPlayer的Src,我使用用户控件来封装。看下面的代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
namespace UnityHost
{
public partial class U3DPlayer : UserControl, IMessageFilter
{
#region 属性
private String _src;
/// <summary>
/// Unity3D文件的路径
/// </summary>
public String Src
{
get { return _src; }
private set { _src = value; }
}
private bool _disableMouseRight = true;
/// <summary>
/// 禁用鼠标右键
/// </summary>
public bool DisableMouseRight
{
get { return _disableMouseRight; }
set { _disableMouseRight = value; }
}
#endregion
#region 自定义事件
//委托
public delegate void ExternalCallHandler(object sender, AxUnityWebPlayerAXLib._DUnityWebPlayerAXEvents_OnExternalCallEvent e);
/// <summary>
/// 接收Unity调用宿主函数的消息
/// </summary>
[Browsable(true), Description("接收Unity调用宿主(如WinForm)函数的消息")]
public event ExternalCallHandler UnityCall;
//方法
public void OnUnityCall(object sender, AxUnityWebPlayerAXLib._DUnityWebPlayerAXEvents_OnExternalCallEvent e)
{
if (UnityCall != null)
{
UnityCall(sender, e);
}
}
#endregion
#region 内部变量
private AxUnityWebPlayerAXLib.AxUnityWebPlayer _axUnityWebPlayer=null;
private ProgressBar _progressBarLoad=null;
#endregion
public U3DPlayer()
{
InitializeComponent();
InitProgressBar();
}
private void InitProgressBar()