我正在为用Unity编写的Microsoft PixelSense编写游戏,通过SurfaceToTUIO桥和unity3d-tuio Unity 插件与表通信。
我目前正在尝试让游戏与 Microsoft PixelSense启动器很好地配合使用。我已经能够通过模仿 Surface Bing 应用程序让我的应用程序出现在启动器中 - 复制 C:\ProgramData\Microsoft\Surface\v2.0\Programs 中 XML 文件的链接并在适当的位置创建相应的 XML格式。
当我进入 Surface 模式时 - 无论是通过专用 Surface 用户帐户,还是通过管理员配置文件中的 Surface Shell,游戏都会正确显示在启动栏上,并带有我在 XML 中设置的自定义图标。游戏从酒吧正确启动,我可以毫无错误地玩大约两分钟。
那时,启动器会关闭我的游戏。通过一些研究,我了解到应用程序有责任解雇 Launcher。
由于这是 Microsoft PixelSense SDK 的一部分,Unity 无法访问,因此我尝试了各种方法来解决这个问题:
- 我尝试在单应用程序模式下运行游戏。事实证明,还有一个不同的超时仍在等待SignalApplicationLoadComplete调用。
- 我尝试在Registry中使用CriticalProcessMonitoring Disable和ApplicationProcessMonitoring Disable键。
- 我尝试将LoadingScreenTimeout和SingleAppLoadingScreenTimeout 注册表项设置为 0 - 低于其有效阈值。
我想要的是为我的用户提供进入和退出 Unity 游戏的最流畅的体验。目前我们必须从 Windows 桌面启动我们的游戏,这可能会让用户感到沮丧,因为 Windows 无法区分手指触摸屏幕和手掌悬停在屏幕上方。
有没有人有解决方法,对我如何从 Unity 欺骗 SignalApplicationLoadingCall 有很好的理解,或者有什么可以尝试的建议?
谢谢!
更新:我发现了更多不起作用的东西:
- 我在 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.Surface\v4.0_2.0.0.0__31bf3856ad364e35找到了Microsoft.Surface DLL 。我将它导入到我的 Unity 项目中,但收到了一个 System.TypeLoadException,似乎是 DLL 是用Unity 目前不支持的.NET 4.0编译的。
- 我一直找不到任何可以让我在不需要 DLL 的情况下与启动器通信的 COM 对象。
- 根据这篇文章,我不能使用XNA 包装程序,因为 System.Diagnostics.Process.Start 在 Surface 模式下不起作用。