首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未解析命名空间UnityEngine.VR.WSA

未解析命名空间UnityEngine.VR.WSA
EN

Stack Overflow用户
提问于 2017-05-01 21:18:00
回答 1查看 2.5K关注 0票数 0

我有一个使用HLAPI的网络统一项目,我需要从该项目构建:

  • Hololens客户端(platform = WSA)
  • Windows桌面客户端(platform = PC独立)
  • Windows桌面服务器(platform = PC独立)

我有三个专门的场景,每个角色一个,以及一个基本场景,根据角色设置,只在运行时加载其中一个场景。

这就是问题所在。我有脚本,,包括来自微软的HoloToolkit,在Hololens客户端场景中引用了名称空间、UnityEngine.VR.WSAUnityEngine.VR.WSA.Ipnut中的类。这对于WSA平台来说是很好的编译。但是,当构建桌面客户端和桌面服务器时,所有这些脚本都无法编译,就好像这些名称空间不存在一样。

下面是一个示例:

代码语言:javascript
复制
Assets/HoloToolkit/Input/Scripts/GestureManager.cs(139,17): error CS0246: The type or namespace name `GestureRecognizer' could not be found. Are you missing an assembly reference?

GestureRecognizerUnityEngine.VR.WSA.Input。如果这些名称空间中的任何类都将在PC独立平台下调用(而且当角色=桌面客户端或桌面服务器时,我足够聪明地不调用它们),我会认为后端足够聪明,可以在运行时抛出NotSupported异常,但它只是没有编译,所以我真的被困住了。有没有人知道这方面的解决方案,而不重写所有使用UNITY_WSAUNITY_STANDALONE预处理器标志插入任何地方,甚至在第三方导入的资产?

我在团结5.4测试版为霍洛伦斯,这不是问题,在任何。然后我迁移到5.6,这个变成了一个。

EN

回答 1

Stack Overflow用户

发布于 2017-05-01 22:30:43

你应该考虑这一点,甚至在你的应用程序之前。有些API在Windows独立构建和Windows构建之间不可用。更糟糕的是,霍洛伦斯也卷入其中。

您的例子说明了为什么预处理解决方案是不可接受的,这是不好的。预处理指令是解决这一问题的方法。您不必将它包装在声明class的地方。只需将其包装在导入名称空间的地方即可。例如,

代码语言:javascript
复制
#if UNITY_WSA
    using UnityEngine.VR.WSA;
#endif

而且,为了使这对您来说非常容易,您应该而不是UnityEngine.VR.WSA命名空间直接从您的其他类访问UnityEngine.VR.WSA

构建一个包装类,该类包围来自UnityEngine.VR.WSA命名空间的所有输入,然后在该类中使用#if UNITY_WSA。通过这样做,您只需要将#if UNITY_WSA放在一个类中,而不需要引用来自UnityEngine.VR.WSA命名空间的任何API的所有类。

它更容易管理。要从UnityEngine.VR.WSA命名空间访问输入,可以使用该包装器。记住,只对您需要的API进行包装。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43726673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档