使用NamedBuildTarget.Unknown调用PlayerSettings.SetApiCompatibilityLevel报错求助
问题
我尝试用以下代码统一设置PlayerSettings的API兼容级别为.NET Framework:
// Set PlayerSettings API Compatibility Level to always be .NET Framework PlayerSettings.SetApiCompatibilityLevel(UnityEditor.Build.NamedBuildTarget.Unknown, ApiCompatibilityLevel.NET_Unity_4_8);
但运行后抛出错误:
ArgumentException: The provided target platform group name () is not valid. UnityEditor.PlayerSettings.SetApiCompatibilityLevel (UnityEditor.Build.NamedBuildTarget buildTarget, UnityEditor.ApiCompatibilityLevel value) (at <4f41070b52224a70bdc90f923c6b37de>:0)
此前我能用PlayerSettings.SetIcons(UnityEditor.Build.NamedBuildTarget.Unknown, new Texture2D[] ......)的方式统一设置图标,但API兼容级别用同样的方式行不通。由于我们支持的所有设备平台都兼容目标.NET API,我希望找到一种统一设置的方案,而非为每个构建目标单独编写代码。
解决方案
NamedBuildTarget.Unknown并不适用于PlayerSettings.SetApiCompatibilityLevel方法,该方法要求传入有效的构建目标。不过你可以通过遍历所有已注册的构建目标来实现统一设置,无需手动逐个编写:
using UnityEditor; public static class ApiCompatibilityBatchSetup { [MenuItem("Tools/Batch Set API Compatibility Level")] public static void SetAllTargetsApiCompatibility() { foreach (var buildTarget in NamedBuildTarget.AllBuildTargets) { if (buildTarget == NamedBuildTarget.Unknown) continue; PlayerSettings.SetApiCompatibilityLevel(buildTarget, ApiCompatibilityLevel.NET_Unity_4_8); } AssetDatabase.SaveAssets(); UnityEngine.Debug.Log("已为所有构建目标统一设置API兼容级别"); } }
另外,也可以通过编辑器UI直接设置默认值并同步所有目标:
- 打开
Edit > Project Settings > Player面板 - 在
Other Settings中找到Api Compatibility Level,选择目标.NET版本 - 该设置会自动同步到所有未单独配置过API兼容级别的构建目标
如果需要代码自动化处理,上述遍历NamedBuildTarget.AllBuildTargets的方式最可靠,能确保所有现有构建目标都被统一设置。
内容的提问来源于stack exchange,提问作者Mauricio Rodriguez
相关产品推荐
相关产品推荐

