尝试为 ios 构建 Google Cardboard 演示项目时,它因编译器错误而失败
When trying to build the Google Cardboard demo project for ios, it fails citing compiler error
我没有对示例项目进行任何更改。我是 运行 Unity 5.0.2f1。当我尝试为 Google Cardboard for ios 构建演示项目时,它说它无法构建,因为脚本有编译器错误。它显示了两个编译器错误:
Assets/Cardboard/Editor/CardboardEditor.cs(128,42):error CS0117: 'UnityEditor.PlayerSettings' does not contain a definition for 'GetGraphicsAPIs'
和
Assets/Cardboard/Editor/CardboardEditor.cs(130,5): error CS1579: foreach statement cannot operate on variables of type 'object' because it does not contain a definition for 'GetEnumerator' or is not accessible
我认为解决第一个错误会解决第二个错误。抛出错误的代码如下所示:
private static void CheckGraphicsAPI() {
#if UNITY_IOS
#if UNITY_5 || UNITY_4_6 && !UNITY_4_6_1 && !UNITY_4_6_2
#if UNITY_5
var iOSBuildTarget = BuildTarget.iOS;
var iOSGraphicsAPIs = PlayerSettings.GetGraphicsAPIs(BuildTarget.iOS);
bool isOpenGL = true;
foreach (var device in iOSGraphicsAPIs) {
isOpenGL &= (device == GraphicsDeviceType.OpenGLES2 || device == GraphicsDeviceType.OpenGLES3);
}
#else
var iOSBuildTarget = BuildTarget.iPhone;
bool isOpenGL = PlayerSettings.targetIOSGraphics == TargetIOSGraphics.OpenGLES_2_0
|| PlayerSettings.targetIOSGraphics == TargetIOSGraphics.OpenGLES_3_0;
#endif // UNITY_5
if (EditorUserBuildSettings.activeBuildTarget == iOSBuildTarget
&& !Application.isPlaying
&& Object.FindObjectOfType<Cardboard>() != null
&& !isOpenGL) {
Debug.LogWarning("iOS Graphics API should be set to OpenGL for best " +
"distortion-correction performance in Cardboard.");
}
#endif // UNITY_5 || UNITY_4_6 && !UNITY_4_6_1 && !UNITY_4_6_2
#endif // UNITY_IOS
}
}
此功能只是想提醒您,如果您想在 SDK 中使用原生 (C++) 失真校正,Player Settings 中的 Graphics API 必须是 OpenGL(即不是 Metal) .
如果您已经知道(或不关心),那么您可以通过注释掉该函数的主体来解决该错误。
(Unity 一直在更改其枚举和函数以在多个增量版本中检查图形 API。因此这些错误不断出现,Cardboard SDK 必须在下一个版本中赶上。 )
我没有对示例项目进行任何更改。我是 运行 Unity 5.0.2f1。当我尝试为 Google Cardboard for ios 构建演示项目时,它说它无法构建,因为脚本有编译器错误。它显示了两个编译器错误:
Assets/Cardboard/Editor/CardboardEditor.cs(128,42):error CS0117: 'UnityEditor.PlayerSettings' does not contain a definition for 'GetGraphicsAPIs'
和
Assets/Cardboard/Editor/CardboardEditor.cs(130,5): error CS1579: foreach statement cannot operate on variables of type 'object' because it does not contain a definition for 'GetEnumerator' or is not accessible
我认为解决第一个错误会解决第二个错误。抛出错误的代码如下所示:
private static void CheckGraphicsAPI() {
#if UNITY_IOS
#if UNITY_5 || UNITY_4_6 && !UNITY_4_6_1 && !UNITY_4_6_2
#if UNITY_5
var iOSBuildTarget = BuildTarget.iOS;
var iOSGraphicsAPIs = PlayerSettings.GetGraphicsAPIs(BuildTarget.iOS);
bool isOpenGL = true;
foreach (var device in iOSGraphicsAPIs) {
isOpenGL &= (device == GraphicsDeviceType.OpenGLES2 || device == GraphicsDeviceType.OpenGLES3);
}
#else
var iOSBuildTarget = BuildTarget.iPhone;
bool isOpenGL = PlayerSettings.targetIOSGraphics == TargetIOSGraphics.OpenGLES_2_0
|| PlayerSettings.targetIOSGraphics == TargetIOSGraphics.OpenGLES_3_0;
#endif // UNITY_5
if (EditorUserBuildSettings.activeBuildTarget == iOSBuildTarget
&& !Application.isPlaying
&& Object.FindObjectOfType<Cardboard>() != null
&& !isOpenGL) {
Debug.LogWarning("iOS Graphics API should be set to OpenGL for best " +
"distortion-correction performance in Cardboard.");
}
#endif // UNITY_5 || UNITY_4_6 && !UNITY_4_6_1 && !UNITY_4_6_2
#endif // UNITY_IOS
}
}
此功能只是想提醒您,如果您想在 SDK 中使用原生 (C++) 失真校正,Player Settings 中的 Graphics API 必须是 OpenGL(即不是 Metal) .
如果您已经知道(或不关心),那么您可以通过注释掉该函数的主体来解决该错误。
(Unity 一直在更改其枚举和函数以在多个增量版本中检查图形 API。因此这些错误不断出现,Cardboard SDK 必须在下一个版本中赶上。 )