使用导入的 Tango SDK 构建 Unity PC 独立项目时出现编译错误
Compile Errors when building a Unity PC Standalone project with the Tango SDK imported
各位下午好,
(我已经搜索了很多关于这个问题的答案,但它似乎是一种罕见的情况,或者我的 google-fu 不符合标准。如果答案很明显,在另一个线程中,如果你能指导我,我会在路上。)
问题:
似乎不可能从 Unity 构建 PC 独立应用程序,而项目中导入了 TangoSDK,即使构建中包含的场景不使用任何 Tango 资产也是如此。
(版本:Unity 5.5.1,TangoSDK Hopak,Windows 10)
重现问题的步骤:
- 创建一个空的 Unity 项目。
- 导入 TangoSDK Unity 包(通过 Eisa、Farandole、Hopak 版本确认)
- 创建并保存一个标准的空场景(仅限相机和灯光)
- 打开构建设置并将目标平台设置为'PC Mac & Linux Standalone'
- 点击'Build'
- 构建过程失败,出现错误:
Assets/TangoSDK/Core/Scripts/Common/OrientationManager.cs(62,0): error
CS1029: #error: 'not supported platform'
我尝试这样做的原因是因为我们正在构建一个跨平台应用程序,该应用程序的移动版本正在使用 Tango。一个明显的解决方法是创建 2 个不同的项目,一个用于 android 部署并加载 TangoSDK,一个用于桌面,没有 Tango 库。但是由于版本之间有很多共享资产,将所有内容都放在一个项目中显然效率更高,所以我正在尝试找到一种解决方案,暂时不涉及我将开发拆分为 2 个 Unity 项目.
我有预感问题是从 AndroidHelper 接口(在 Assets>Google-Unity>Scripts 中)开始的,因为它似乎有一些对 OrientationManager 的引用,但我不知道为什么它被包含在 PC 版本中。
有没有办法从构建中排除任何 android 相关脚本?
谢谢
编辑
经过更多的探索,这里有更多的信息。原来的错误是由于遗漏,这里是给出错误的原始代码:
public static ScreenOrientation GetScreenOrientation()
{
#if (UNITY_EDITOR || UNITY_STANDALONE_OSX)
if (Screen.width > Screen.height)
{
return ScreenOrientation.LandscapeLeft;
}
else
{
return ScreenOrientation.Portrait;
}
#elif (UNITY_IPHONE || UNITY_ANDROID)
return Screen.orientation;
#else
#error not supported platform
#endif
}
第一次平台检查未涵盖 UNITY_STANDALONE_WIN(Windows 平台),因此导致错误。替换行
#if (UNITY_EDITOR || UNITY_STANDALONE_OSX)
和
#if (UNITY_EDITOR || UNITY_STANDALONE)
修复了原始错误,但总的来说问题仍然存在:抛出错误的每一行要么在 Tango 库中,要么正在使用 Tango 库,而这些脚本根本不应该被调用,因为我本质上是在构建一个空场景。默认情况下,所有 Unity 构建中是否包含与 android 相关的脚本?这可能会帮助我缩小搜索范围。
Is there a way then to exclude any android-relevant scripts from the
build?
是
首先,这应该是制作 TangoSDK 的人的工作。他们可能忘了这样做。我建议你联系他们并报告这个问题。
解决方法是修改 TangoSDK 并使用 Unity 的平台指令自行修复它,直到他们修复它。
切换到 'PC Mac & Linux Standalone' 以显示错误。尝试构建它以使错误出现。通过在编辑器中双击每个错误找到代码行,然后将其放入下面的代码中:
#if UNITY_ANDROID || UNITY_IOS
//PUT THAT LINE OF CODE THAT IS CAUSING THE ERROR HERE
#endif
因为TangoSDK支持iOS,所以我也加了iOS。如果你对所有错误都这样做,你应该没有任何问题。
各位下午好,
(我已经搜索了很多关于这个问题的答案,但它似乎是一种罕见的情况,或者我的 google-fu 不符合标准。如果答案很明显,在另一个线程中,如果你能指导我,我会在路上。)
问题:
似乎不可能从 Unity 构建 PC 独立应用程序,而项目中导入了 TangoSDK,即使构建中包含的场景不使用任何 Tango 资产也是如此。
(版本:Unity 5.5.1,TangoSDK Hopak,Windows 10)
重现问题的步骤:
- 创建一个空的 Unity 项目。
- 导入 TangoSDK Unity 包(通过 Eisa、Farandole、Hopak 版本确认)
- 创建并保存一个标准的空场景(仅限相机和灯光)
- 打开构建设置并将目标平台设置为'PC Mac & Linux Standalone'
- 点击'Build'
- 构建过程失败,出现错误:
Assets/TangoSDK/Core/Scripts/Common/OrientationManager.cs(62,0): error CS1029: #error: 'not supported platform'
我尝试这样做的原因是因为我们正在构建一个跨平台应用程序,该应用程序的移动版本正在使用 Tango。一个明显的解决方法是创建 2 个不同的项目,一个用于 android 部署并加载 TangoSDK,一个用于桌面,没有 Tango 库。但是由于版本之间有很多共享资产,将所有内容都放在一个项目中显然效率更高,所以我正在尝试找到一种解决方案,暂时不涉及我将开发拆分为 2 个 Unity 项目.
我有预感问题是从 AndroidHelper 接口(在 Assets>Google-Unity>Scripts 中)开始的,因为它似乎有一些对 OrientationManager 的引用,但我不知道为什么它被包含在 PC 版本中。
有没有办法从构建中排除任何 android 相关脚本? 谢谢
编辑
经过更多的探索,这里有更多的信息。原来的错误是由于遗漏,这里是给出错误的原始代码:
public static ScreenOrientation GetScreenOrientation()
{
#if (UNITY_EDITOR || UNITY_STANDALONE_OSX)
if (Screen.width > Screen.height)
{
return ScreenOrientation.LandscapeLeft;
}
else
{
return ScreenOrientation.Portrait;
}
#elif (UNITY_IPHONE || UNITY_ANDROID)
return Screen.orientation;
#else
#error not supported platform
#endif
}
第一次平台检查未涵盖 UNITY_STANDALONE_WIN(Windows 平台),因此导致错误。替换行
#if (UNITY_EDITOR || UNITY_STANDALONE_OSX)
和
#if (UNITY_EDITOR || UNITY_STANDALONE)
修复了原始错误,但总的来说问题仍然存在:抛出错误的每一行要么在 Tango 库中,要么正在使用 Tango 库,而这些脚本根本不应该被调用,因为我本质上是在构建一个空场景。默认情况下,所有 Unity 构建中是否包含与 android 相关的脚本?这可能会帮助我缩小搜索范围。
Is there a way then to exclude any android-relevant scripts from the build?
是
首先,这应该是制作 TangoSDK 的人的工作。他们可能忘了这样做。我建议你联系他们并报告这个问题。
解决方法是修改 TangoSDK 并使用 Unity 的平台指令自行修复它,直到他们修复它。
切换到 'PC Mac & Linux Standalone' 以显示错误。尝试构建它以使错误出现。通过在编辑器中双击每个错误找到代码行,然后将其放入下面的代码中:
#if UNITY_ANDROID || UNITY_IOS
//PUT THAT LINE OF CODE THAT IS CAUSING THE ERROR HERE
#endif
因为TangoSDK支持iOS,所以我也加了iOS。如果你对所有错误都这样做,你应该没有任何问题。