Unity Hololens (UWP) 构建会产生独立构建不会产生的错误?

Posted

技术标签:

【中文标题】Unity Hololens (UWP) 构建会产生独立构建不会产生的错误?【英文标题】:Unity Hololens (UWP) build generates errors that Standalone builds do not? 【发布时间】:2017-11-15 19:55:26 【问题描述】:

替代标题: Hololens Windows UWP 构建 (10.0.10586.0) 的 Unity 参考错误? 或..... Unity Hololens 构建可以访问独立构建 DLL 引用?

快速前文:我正在设计一个在 Hololens 上运行的应用程序。游戏在 Unity 中运行良好。它在 PC、Mac 和 Linux 独立平台上构建得非常好,没有错误。

但是,在构建到 Windows 应用商店平台时会出现“缺失”引用的错误。 (缺少引号是因为我已经彻底检查并重新检查我使用了正确的参考,并且它们位于应有的位置)。

尝试构建的初始错误是:

Error building Player because scripts had compiler errors
error: The type or namespace name 'FileSystemEventArgs' could not be found (are you missing a using directive or an assembly reference?)
private void PrototypeFileWatcher_Created(object sender, FileSystemEventArgs e)

    ...

当通过注释掉上述函数和相关代码来纠正此错误,并再次尝试构建时,会出现以下错误:

error: The name 'Console' does not exist in the current context
catch (Exception e)

    Console.WriteLine(e.Message);


error: Argument 1: cannot convert from 'string' to 'System.IO.Stream'
using (StreamReader sr = new StreamReader(path))

    ...


error: The type or namespace name 'BufferedStream' could not be found (are you missing a using directive or an assembly reference?)
using (BufferedStream bs0 = new BufferedStream(f0))

    ...

参考存储在适当的位置:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Unity Full v3.5\System.Core.dll

参考文献列在脚本的标题中:

using UnityEngine;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Threading;

说了这么多。我试过了:

-Changing Api Compatibility Level*
-Changing the project solutions net framework
-#if NETFX_CORE using x = WinRTLegacy.x; #else
-#if WINDOWS_UWP using System; #endif
-Trashing the project entirely and rebuilding from scratch
-And lots more

现在已经为这个问题苦苦挣扎了一整天。我有 NuGet pkgs,用于 Unity 的 VS 工具(也称为 VSTU),我正在使用 VS2015。 我现在完全不知所措。我不明白我是否无法将它构建到 Windows 应用商店平台,因为它不能使用 Unity 独立构建的某些 DLL?

【问题讨论】:

这可能相关也可能不相关,但是您使用的是哪个版本的 Unity?我在使用 5.6 时遇到了 大量 问题,而 5.5 就像做梦一样。 【参考方案1】:

HoloLens 应用程序仅限于使用 UWP 应用程序中可用的内容。有些东西可以在 Unity 编辑器中工作,但在 HoloLens 应用程序中不起作用,因为统一编辑器是使用 mono 而不是 .net 构建的。您应该限制自己只使用在 UWP 中工作的东西,它们在编辑器中也能正常工作。甚至完整的 UWP API 集也无法在 HoloLens 上使用。

UWP 的完整文档在这里:

https://docs.microsoft.com/en-us/uwp/api/

专门为 HoloLens 添加的子集在本页底部:

https://developer.microsoft.com/en-us/windows/mixed-reality/development

很遗憾,没有一个地方可以突出显示不可用的内容。 Visual Studio 编译器将帮助您了解什么存在,什么不存在。

【讨论】:

谢谢卡梅伦!感谢您的快速回复。但是我仍然无法理解 UWP 应用程序支持什么,以及您发布的 UWP 文档页面显示 here,即 .NET 支持我原来的 q 中使用的 StreamReader。除了here,我们看到它支持我使用的环境类。我将继续深入研究 API 以了解更多信息,但我很困惑,因为这些似乎是受支持的,但不是为我的 UWP 应用程序构建的 也许这是一个更好的例子here,它指出 .NET Framework 支持 BufferedStream...所以我的问题十变成了如何区分 UWP 应用程序支持的内容和不支持的内容? 我也对此感到困惑。对于 HoloLens 支持和不支持的内容,我没有看到任何明确的来源。例如,与文件相关的 System.IO 内容不起作用,但您可以使用 Windows.Storage.StorageFile 类。 docs.microsoft.com/en-us/uwp/api/windows.storage.storagefile 啊,我明白了。向下滚动页面并查看“版本信息”下。如果它包含以下内容,“Universal Windows Platform Available since 8”,则 UWP 应用程序支持它。如果它只包含“.NET Framework Available since 1.1”,那么它不是。 我在寻找这个问题的答案的过程中发现了这个:***.com/questions/51303085/… 对于 System.Xml,它说自 10 起可用于 UWP。因此 Hololens 应该支持它,还是我错了?

以上是关于Unity Hololens (UWP) 构建会产生独立构建不会产生的错误?的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D UWP Hololens:使用 InputField 的 Web 门户输入而不会弹出 TouchScreenKeyboard

Unity开发Hololens2—交互发布配置

统一关闭 Hololens 2 中的启动画面

如何用Unity创建一个的简单的HoloLens 3D程序

UWP Directory.CreateDirectory 中的 UnauthorizedAccessException

如何将HoloLens 2仿真器与本地UDP发送器连接