一. 在 WPF 中使用 WebBrowser,直接打开 WebPlayer.html

以这种方式有一个问题是. 无法在 WebBrowser 的上面 放置其它的控件, 在运行时,都不会显示 .

以 HTML为中介, 可以方便的换场景. (真接设置 WebBrowser.Source=new Uri(@"x:\\WebPlayr.unity3d");) 即可.  WPF->Unity 或 Unity->WPF 都要通过 HTML的Javascript脚本. 这种方式是目前最简单靠谱的方式 . ~

二 .嵌入UntiyWebPlayer 的 ActiveX 控件 

                    -----此种方式有两个未解决的问题 1. 未能屏蔽右键菜单 2.不能动态的改变 UnityWebPlayer的 src 属性

一. 嵌入的流程

1.创建一个 WPF 工程

2.创建一个 WindowForm 自定义控件库 (UserControl)

1).引入 UntiyWebPlayer COM 组件

  2).将 这个组件拖到 UserControl 里, 并将 Dock属性设置为 Fill 让它充满整个控件

  3).在自定义的程序文件中,增加一个 UnityWebPlayer 的Public引用. 这样做的目的是,之后可以对其进行操作

4).生成 , 在 bin 中会有三个 DLL 文件 , 只有两个有用 . 一个是 AxInterop.UnityWebPlayerAXLib 另一个是 你定义的那个组件的 DLL.

3. 将那两个有用的 DLL 引入到我们的 WPF 工程中. 并且 再引入 System.Windows.Forms 及 WindowsFormIntegration.

4. 在 WPF 的XAML的 Window 标签中 引入我们的 自定义控件的名称空间. 如: xmlns:unity="..."  在 <Grid> 中, 加入一个 <WindowsFormHost> 标签,用来承载我们的 WIndowsForm 的自定义组件. 并在其中 加入 如: <unity:UnityPlayer x:Name="UnityPlayer">. 这样, 就将UnityWebPlayer 嵌入了 WPF中.

二. 实现 Unity3D 与 WPF 间的双向通讯

WPF -> Unity : 要在 WPF 的 MainWindow 的 CS 文件中,引用 AxUnityWebPlayerAXLib 命名空间,这样才能使用这个 UWP COM组件的 SendMessage 方法.

        如: UnityPlayer.Player.SendMessage("Cube","ChangeToBig",null);   (UnityPlayer: 为自定义的组件, Player: 为UWP 的COM组件的引用)

        SendMessage 方法的参数 : 1.物体名(string) 2.方法名(string) 3.方法参数(object).

Unity -> WPF : 在创建 自定义组件的时候 (将 COM 组件封装成 WPF 可以使用的 控件) . 在处理 UWP 的 OnExternalCall 事件, 它的参数 e.value , 里面就是 字符数组,

        以 ',' 分开,第一个是 方法名. 之后都是参数也为字符串.  这种处理的事件一组就是. Unity里的变化, 需要 WPF的界面做出相应变化的时候, 最好是写一个,处理                          ExternalCall的类, 然后使用反射使用字符串得到相应的方法名进行处理.

 网上找到的,可以动态改变 src 的解决方法

 // Create a ocx state object with the correct path
_Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit();
_Unity.OcxState = (AxHost.State)(Resources.Unity3DOcx);
_Unity.TabIndex = ;
Controls.Add(_Unity);
((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit();
_Unity.src = _File;
AxHost.State state = _Unity.OcxState;
_Unity.Dispose(); // Create the unity web player object
_Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit();
this.SuspendLayout();
_Unity.Dock = DockStyle.Fill;
_Unity.Name = "Unity";
_Unity.OcxState = state;
_Unity.TabIndex = ;
Controls.Add(_Unity);
((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit();
this.ResumeLayout(false);

Unity3D 将 Unity 嵌入WPF中的一些研究笔记的更多相关文章

  1. Unity在WPF中的应用

    1. 本文的实现类继承于IRepository using System; using System.Linq; using System.Linq.Expressions; using Zhang. ...

  2. 如何将Skyline66嵌入WPF中

    1.新建WPF项目: 2.添加引用 .net引用:System.Windows.Forms和WindowsFormsIntegration skyline引用:AxInterop.TerraExplo ...

  3. Unity3D嵌入WPF教程

    Unity3D嵌入WPF教程 创建一个 类库工程 添加 WindowForm 用户控件 (UserControl) 1).引入 UntiyWebPlayer COM 组件 在工具->选择工具箱中 ...

  4. WPF中嵌入普通Win32程序的方法

    公司现在在研发基于.Net中WPF技术的产品,由于要兼容旧有产品,比如一些旧有的Win32程序.第三方的Win32程序等等,还要实现自动登录这些外部Win32程序,因此必须能够将这些程序整合到我们的系 ...

  5. WPF中嵌入Office编辑器(支持Word、Excel、PPT、Visio等)

    现在有一个项目,需要使用wpf做一个简单的客户端,用来生成word.excel.ppt.visio等文档,这就需要能够在wpf中嵌入office的编辑器,并对office文档进行编辑. 在网上搜索了一 ...

  6. WPF中嵌入WinForm中的webbrowser控件

    原文:WPF中嵌入WinForm中的webbrowser控件 使用VS2008创建WPF应用程序,需使用webbrowser.从工具箱中添加WPF组件中的webbrowser发现其中有很多属性事件不能 ...

  7. 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案

    Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...

  8. 在WinForm应用程序中嵌入WPF控件

    我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类.而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是为了 ...

  9. 在WPF中使用CefSharp嵌入浏览器(转)

    在WPF中使用CefSharp嵌入浏览器   日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...

随机推荐

  1. C# 代码重启windows服务

    ServiceController service = new ServiceController("EnergyRecordService"); protected void b ...

  2. Android SDK API (2.2,2.3,3.0)中文版文档

    转的一篇.觉得很有用. Android SDK API (2.2,2.3,3.0)中文版文档 地址:http://android.laoguo.org固定连接:http://www.laoguo.or ...

  3. .NET开源工作流RoadFlow-流程设计-流程属性设置

    打开流程设计器点击新建流程后会弹出新流程属性设置框,属性设置包括基本信息,数据连接和标识字段三项设置. 1.基本信息 流程ID:系统自动给每个流程分配的一个唯一ID. 流程名称:给您的新流程取一个名称 ...

  4. netfilter

    http://jingyan.baidu.com/article/642c9d3415d2c9644a46f7c6.html http://blog.csdn.net/zhangskd/article ...

  5. 使用angular封装echarts

    Echarts是一个开源的图表组件,图表比较丰富,工作中需要用到它来搭建一个数据展示系统.但是系统原有的框架是基于angular的,而echarts是基于原生js的,如果直接使用的话就丢失了angul ...

  6. Effective Objective-C 2.0之Note.02

    1.多用类型常量,少用#define预处理指令 不要用预处理指令定义常量.这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生警告信息 ...

  7. C#判断字符串为空

    string str = null; if (string.IsNullOrWhiteSpace(str)) { MessageBox.Show("字符串为null"); } if ...

  8. ASP.NET Web API 2 对 CORS 的支持

    CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览器施加的同域策略安全限制. 所谓同域策略, ...

  9. 33.allegro中Autosilk top, Silkscreen top 和Assembly top三个什么区别(转)

    Autosilk top, Silkscreen top 和Assembly top Autosilk top:最后出gerber的时候,自动生成的丝印层.会自动调整丝印位置,以及碰到阻焊开窗的地方, ...

  10. shell基本语法备忘

    1.第一行要写明shell种类 #!/bin/bash   2.打印输出 #!/bin/bashecho "Hello World !~"   3.变量定义 变量=前后不能有空格, ...