4

我正在尝试使用 WinFormsHost-Control 将 Unity3D-ActiveX 控件嵌入到 WPF-Form 中。

实际上,在 VS 的属性窗口中设置路径时效果很好,但是在我的代码文件中设置它时,它不会加载任何内容。这是控件的一个已知问题,但我认为我可以简单地复制表单设计器的创建代码并手动初始化它。

在查看初始化代码时,我注意到代码中没有src属性,但是在属性窗口中使用了该属性。手动设置属性不起作用(引发错误)。

经过一些测试后,我决定检查该src属性的孔组件,但该src属性从未设置,我什至找不到路径的字符串。

最后的想法

我注意到 src-path 只能位于一个位置:窗口窗体设计器生成的资源,它是AxHost.State类型的对象。

问题

如何创建一个有效AxHost.State对象来初始化 Unity3D-ActiveX 控件,该控件应该加载我指定的 Unity3D 文件?

4

3 回答 3

4

这是可行但有点慢的解决方案(注意:您需要在表单设计器中初始化一次控件并将 OcxState 对象复制到程序集资源中):

// 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 = 0;
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 = 0;
Controls.Add(_Unity);
((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit();
this.ResumeLayout(false);
于 2012-01-20T09:31:28.667 回答
2

如果要在 ActiveX Unity Web 播放器的 disableContextMenu 属性中设置参数,则需要在程序中准备 IPropertyBag.Read 方法。

我制作了一个示例 C++ 程序(Visual Studio 2010),它将“true”参数设置为 disableContextMenu 属性。请参阅http://www.nibiirosoft.com/download/UnityActiveXSample.zip

并使用这些代码,我为 .unity3d 文件制作了一个播放器(http://www.nibiirosoft.com/Product/UniPlayer.html)。

我希望它对你有帮助。

于 2012-07-23T17:52:43.393 回答
0

将dll“”反编译,直接在代码中AxUnityWebPlayerAXLib添加参数即可解决问题。src

一切正常,但我仍然对“ disableContextMenu”有疑问。

于 2012-01-19T16:33:23.483 回答