@@ -52,46 +52,91 @@ public enum Configurations
5252 IOSCameraUsageDescription ,
5353 } ;
5454
55+ private class ConfigGetter
56+ {
57+ /// <summary>
58+ /// Array of build targets where the get action is valid
59+ /// </summary>
60+ public BuildTarget [ ] ValidTargets ;
61+
62+ /// <summary>
63+ /// Action to perform to determine if the current configuration is correctly enabled
64+ /// </summary>
65+ public Func < bool > GetAction ;
66+
67+ public ConfigGetter ( Func < bool > get , BuildTarget target = BuildTarget . NoTarget )
68+ {
69+ GetAction = get ;
70+ ValidTargets = new BuildTarget [ ] { target } ;
71+ }
72+
73+ public ConfigGetter ( Func < bool > get , BuildTarget [ ] targets )
74+ {
75+ GetAction = get ;
76+ ValidTargets = targets ;
77+ }
78+
79+ /// <summary>
80+ /// Returns true if the active build target is contained in the ValidTargets list or the list contains a BuildTarget.NoTarget entry, false otherwise
81+ /// </summary>
82+ public bool IsActiveBuildTargetValid ( )
83+ {
84+ foreach ( var buildTarget in ValidTargets )
85+ {
86+ if ( buildTarget == BuildTarget . NoTarget || buildTarget == EditorUserBuildSettings . activeBuildTarget )
87+ {
88+ return true ;
89+ }
90+ }
91+
92+ return false ;
93+ }
94+ }
95+
5596 // The check functions for each type of setting
56- private static readonly Dictionary < Configurations , Func < bool > > ConfigurationGetters = new Dictionary < Configurations , Func < bool > > ( )
97+ private static readonly Dictionary < Configurations , ConfigGetter > ConfigurationGetters = new Dictionary < Configurations , ConfigGetter > ( )
5798 {
58- { Configurations . LatestScriptingRuntime , ( ) => { return IsLatestScriptingRuntime ( ) ; } } ,
59- { Configurations . ForceTextSerialization , ( ) => { return IsForceTextSerialization ( ) ; } } ,
60- { Configurations . VisibleMetaFiles , ( ) => { return IsVisibleMetaFiles ( ) ; } } ,
99+ { Configurations . LatestScriptingRuntime , new ConfigGetter ( ( ) => { return IsLatestScriptingRuntime ( ) ; } ) } ,
100+ { Configurations . ForceTextSerialization , new ConfigGetter ( ( ) => { return IsForceTextSerialization ( ) ; } ) } ,
101+ { Configurations . VisibleMetaFiles , new ConfigGetter ( ( ) => { return IsVisibleMetaFiles ( ) ; } ) } ,
61102 // Ensure compatibility with the pre-2019.3 XR architecture for customers / platforms
62103 // with legacy requirements.
63104#pragma warning disable 0618
64- { Configurations . VirtualRealitySupported , ( ) => { return PlayerSettings . virtualRealitySupported ; } } ,
105+ { Configurations . VirtualRealitySupported , new ConfigGetter ( ( ) => { return PlayerSettings . virtualRealitySupported ; } ) } ,
65106#pragma warning restore 0618
66- { Configurations . SinglePassInstancing , ( ) => { return MixedRealityOptimizeUtils . IsSinglePassInstanced ( ) ; } } ,
67- { Configurations . SpatialAwarenessLayer , ( ) => { return HasSpatialAwarenessLayer ( ) ; } } ,
68- { Configurations . EnableMSBuildForUnity , ( ) => { return IsMSBuildForUnityEnabled ( ) ; } } ,
107+ { Configurations . SinglePassInstancing , new ConfigGetter ( ( ) => { return MixedRealityOptimizeUtils . IsSinglePassInstanced ( ) ; } ) } ,
108+ { Configurations . SpatialAwarenessLayer , new ConfigGetter ( ( ) => { return HasSpatialAwarenessLayer ( ) ; } ) } ,
109+ { Configurations . EnableMSBuildForUnity , new ConfigGetter ( ( ) => { return IsMSBuildForUnityEnabled ( ) ; } ) } ,
69110
70111 // UWP Capabilities
71- { Configurations . SpatialPerceptionCapability , ( ) => { return PlayerSettings . WSA . GetCapability ( PlayerSettings . WSACapability . SpatialPerception ) ; } } ,
72- { Configurations . MicrophoneCapability , ( ) => { return PlayerSettings . WSA . GetCapability ( PlayerSettings . WSACapability . Microphone ) ; } } ,
73- { Configurations . InternetClientCapability , ( ) => { return PlayerSettings . WSA . GetCapability ( PlayerSettings . WSACapability . InternetClient ) ; } } ,
112+ { Configurations . SpatialPerceptionCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . SpatialPerception ) ; } , BuildTarget . WSAPlayer ) } ,
113+ { Configurations . MicrophoneCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . Microphone ) ; } , BuildTarget . WSAPlayer ) } ,
114+ { Configurations . InternetClientCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . InternetClient ) ; } , BuildTarget . WSAPlayer ) } ,
74115#if UNITY_2019_3_OR_NEWER
75- { Configurations . EyeTrackingCapability , ( ) => { return PlayerSettings . WSA . GetCapability ( PlayerSettings . WSACapability . GazeInput ) ; } } ,
116+ { Configurations . EyeTrackingCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . GazeInput ) ; } , BuildTarget . WSAPlayer ) } ,
76117#endif // UNITY_2019_3_OR_NEWER
77118
78119 // Android Settings
79- { Configurations. AndroidMultiThreadedRendering , ( ) => { return PlayerSettings . GetMobileMTRendering ( BuildTargetGroup . Android ) == false ; } } ,
80- { Configurations . AndroidMinSdkVersion , ( ) => { return PlayerSettings . Android . minSdkVersion >= MinAndroidSdk ; } } ,
120+ { Configurations. AndroidMultiThreadedRendering ,
121+ new ConfigGetter ( ( ) => { return PlayerSettings . GetMobileMTRendering ( BuildTargetGroup . Android ) == false ; } , BuildTarget . Android ) } ,
122+ { Configurations . AndroidMinSdkVersion ,
123+ new ConfigGetter ( ( ) => { return PlayerSettings. Android. minSdkVersion >= MinAndroidSdk; } , BuildTarget. Android) } ,
81124
82125 // iOS Settings
83- { Configurations . IOSMinOSVersion , ( ) => {
126+ { Configurations . IOSMinOSVersion , new ConfigGetter ( ( ) => {
84127 float version ;
85128 if ( ! float . TryParse ( PlayerSettings . iOS . targetOSVersionString , out version ) ) { return false ; }
86- return version >= iOSMinOsVersion ; } } ,
87- { Configurations . IOSArchitecture , ( ) => { return PlayerSettings . GetArchitecture ( BuildTargetGroup . iOS ) == RequirediOSArchitecture ; } } ,
88- { Configurations . IOSCameraUsageDescription , ( ) => { return ! string . IsNullOrWhiteSpace ( PlayerSettings . iOS . cameraUsageDescription ) ; } } ,
129+ return version >= iOSMinOsVersion ; } , BuildTarget . iOS ) } ,
130+ { Configurations . IOSArchitecture ,
131+ new ConfigGetter ( ( ) => { return PlayerSettings . GetArchitecture ( BuildTargetGroup . iOS ) == RequirediOSArchitecture ; } , BuildTarget . iOS ) } ,
132+ { Configurations . IOSCameraUsageDescription ,
133+ new ConfigGetter ( ( ) => { return ! string . IsNullOrWhiteSpace ( PlayerSettings . iOS . cameraUsageDescription ) ; } , BuildTarget . iOS ) } ,
89134 } ;
90135
91136 // The configure functions for each type of setting
92137 private static Dictionary < Configurations , Action > ConfigurationSetters = new Dictionary < Configurations , Action > ( )
93138 {
94- { Configurations . LatestScriptingRuntime , ( ) => { SetLatestScriptingRuntime ( ) ; } } ,
139+ { Configurations . LatestScriptingRuntime , ( ) => { SetLatestScriptingRuntime ( ) ; } } ,
95140 { Configurations . ForceTextSerialization , ( ) => { SetForceTextSerialization ( ) ; } } ,
96141 { Configurations . VisibleMetaFiles , ( ) => { SetVisibleMetaFiles ( ) ; } } ,
97142 // Ensure compatibility with the pre-2019.3 XR architecture for customers / platforms
@@ -130,7 +175,11 @@ public static bool IsConfigured(Configurations config)
130175 {
131176 if ( ConfigurationGetters . ContainsKey ( config ) )
132177 {
133- return ConfigurationGetters [ config ] . Invoke ( ) ;
178+ var configGetter = ConfigurationGetters [ config ] ;
179+ if ( configGetter . IsActiveBuildTargetValid ( ) )
180+ {
181+ return configGetter . GetAction . Invoke ( ) ;
182+ }
134183 }
135184
136185 return false ;
@@ -154,9 +203,9 @@ public static void Configure(Configurations config)
154203 /// <returns>true if entire project is configured as recommended, false otherwise</returns>
155204 public static bool IsProjectConfigured ( )
156205 {
157- foreach ( var getter in ConfigurationGetters )
206+ foreach ( var configGetter in ConfigurationGetters )
158207 {
159- if ( ! getter . Value . Invoke ( ) )
208+ if ( configGetter . Value . IsActiveBuildTargetValid ( ) && ! configGetter . Value . GetAction . Invoke ( ) )
160209 {
161210 return false ;
162211 }
@@ -326,5 +375,10 @@ public static void ApplyXRSettings()
326375 }
327376#pragma warning restore 0618
328377 }
378+
379+ private static bool GetCapability ( PlayerSettings . WSACapability capability )
380+ {
381+ return MixedRealityOptimizeUtils . IsBuildTargetUWP ( ) ? PlayerSettings . WSA . GetCapability ( capability ) : true ;
382+ }
329383 }
330384}
0 commit comments