@@ -52,53 +52,90 @@ 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 ( ) ; } } ,
61- // Ensure compatibility with the pre-2019.3 XR architecture for customers / platforms
62- // with legacy requirements.
63- #pragma warning disable 0618
64- { Configurations . VirtualRealitySupported , ( ) => { return PlayerSettings . virtualRealitySupported ; } } ,
65- #pragma warning restore 0618
66- { Configurations . SinglePassInstancing , ( ) => { return MixedRealityOptimizeUtils . IsSinglePassInstanced ( ) ; } } ,
67- { Configurations . SpatialAwarenessLayer , ( ) => { return HasSpatialAwarenessLayer ( ) ; } } ,
68- { Configurations . EnableMSBuildForUnity , ( ) => { return IsMSBuildForUnityEnabled ( ) ; } } ,
99+ { Configurations . LatestScriptingRuntime , new ConfigGetter ( ( ) => { return IsLatestScriptingRuntime ( ) ; } ) } ,
100+ { Configurations . ForceTextSerialization , new ConfigGetter ( ( ) => { return IsForceTextSerialization ( ) ; } ) } ,
101+ { Configurations . VisibleMetaFiles , new ConfigGetter ( ( ) => { return IsVisibleMetaFiles ( ) ; } ) } ,
102+ { Configurations . VirtualRealitySupported , new ConfigGetter ( ( ) => { return XRSettingsUtilities . LegacyXREnabled ; } ) } ,
103+ { Configurations . SinglePassInstancing , new ConfigGetter ( ( ) => { return MixedRealityOptimizeUtils . IsSinglePassInstanced ( ) ; } ) } ,
104+ { Configurations . SpatialAwarenessLayer , new ConfigGetter ( ( ) => { return HasSpatialAwarenessLayer ( ) ; } ) } ,
105+ { Configurations . EnableMSBuildForUnity , new ConfigGetter ( ( ) => { return IsMSBuildForUnityEnabled ( ) ; } , BuildTarget . WSAPlayer ) } ,
69106
70107 // 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 ) ; } } ,
108+ { Configurations . SpatialPerceptionCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . SpatialPerception ) ; } , BuildTarget . WSAPlayer ) } ,
109+ { Configurations . MicrophoneCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . Microphone ) ; } , BuildTarget . WSAPlayer ) } ,
110+ { Configurations . InternetClientCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . InternetClient ) ; } , BuildTarget . WSAPlayer ) } ,
74111#if UNITY_2019_3_OR_NEWER
75- { Configurations . EyeTrackingCapability , ( ) => { return PlayerSettings . WSA . GetCapability ( PlayerSettings . WSACapability . GazeInput ) ; } } ,
112+ { Configurations . EyeTrackingCapability , new ConfigGetter ( ( ) => { return GetCapability ( PlayerSettings . WSACapability . GazeInput ) ; } , BuildTarget . WSAPlayer ) } ,
76113#endif // UNITY_2019_3_OR_NEWER
77114
78115 // Android Settings
79- { Configurations. AndroidMultiThreadedRendering , ( ) => { return PlayerSettings . GetMobileMTRendering ( BuildTargetGroup . Android ) == false ; } } ,
80- { Configurations . AndroidMinSdkVersion , ( ) => { return PlayerSettings . Android . minSdkVersion >= MinAndroidSdk ; } } ,
116+ { Configurations. AndroidMultiThreadedRendering ,
117+ new ConfigGetter ( ( ) => { return PlayerSettings . GetMobileMTRendering ( BuildTargetGroup . Android ) == false ; } , BuildTarget . Android ) } ,
118+ { Configurations . AndroidMinSdkVersion ,
119+ new ConfigGetter ( ( ) => { return PlayerSettings. Android. minSdkVersion >= MinAndroidSdk; } , BuildTarget. Android) } ,
81120
82121 // iOS Settings
83- { Configurations . IOSMinOSVersion , ( ) => {
122+ { Configurations . IOSMinOSVersion , new ConfigGetter ( ( ) => {
84123 float version ;
85124 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 ) ; } } ,
125+ return version >= iOSMinOsVersion ; } , BuildTarget . iOS ) } ,
126+ { Configurations . IOSArchitecture ,
127+ new ConfigGetter ( ( ) => { return PlayerSettings . GetArchitecture ( BuildTargetGroup . iOS ) == RequirediOSArchitecture ; } , BuildTarget . iOS ) } ,
128+ { Configurations . IOSCameraUsageDescription ,
129+ new ConfigGetter ( ( ) => { return ! string . IsNullOrWhiteSpace ( PlayerSettings . iOS . cameraUsageDescription ) ; } , BuildTarget . iOS ) } ,
89130 } ;
90131
91132 // The configure functions for each type of setting
92- private static Dictionary < Configurations , Action > ConfigurationSetters = new Dictionary < Configurations , Action > ( )
133+ private static readonly Dictionary < Configurations , Action > ConfigurationSetters = new Dictionary < Configurations , Action > ( )
93134 {
94- { Configurations . LatestScriptingRuntime , ( ) => { SetLatestScriptingRuntime ( ) ; } } ,
135+ { Configurations . LatestScriptingRuntime , ( ) => { SetLatestScriptingRuntime ( ) ; } } ,
95136 { Configurations . ForceTextSerialization , ( ) => { SetForceTextSerialization ( ) ; } } ,
96137 { Configurations . VisibleMetaFiles , ( ) => { SetVisibleMetaFiles ( ) ; } } ,
97- // Ensure compatibility with the pre-2019.3 XR architecture for customers / platforms
98- // with legacy requirements.
99- #pragma warning disable 0618
100- { Configurations . VirtualRealitySupported , ( ) => { PlayerSettings . virtualRealitySupported = true ; } } ,
101- #pragma warning restore 0618
138+ { Configurations . VirtualRealitySupported , ( ) => { XRSettingsUtilities . LegacyXREnabled = true ; } } ,
102139 { Configurations . SinglePassInstancing , ( ) => { MixedRealityOptimizeUtils . SetSinglePassInstanced ( ) ; } } ,
103140 { Configurations . SpatialAwarenessLayer , ( ) => { SetSpatialAwarenessLayer ( ) ; } } ,
104141 { Configurations . EnableMSBuildForUnity , ( ) => { PackageManifestUpdater . EnsureMSBuildForUnity ( ) ; } } ,
@@ -130,7 +167,11 @@ public static bool IsConfigured(Configurations config)
130167 {
131168 if ( ConfigurationGetters . ContainsKey ( config ) )
132169 {
133- return ConfigurationGetters [ config ] . Invoke ( ) ;
170+ var configGetter = ConfigurationGetters [ config ] ;
171+ if ( configGetter . IsActiveBuildTargetValid ( ) )
172+ {
173+ return configGetter . GetAction . Invoke ( ) ;
174+ }
134175 }
135176
136177 return false ;
@@ -154,9 +195,9 @@ public static void Configure(Configurations config)
154195 /// <returns>true if entire project is configured as recommended, false otherwise</returns>
155196 public static bool IsProjectConfigured ( )
156197 {
157- foreach ( var getter in ConfigurationGetters )
198+ foreach ( var configGetter in ConfigurationGetters )
158199 {
159- if ( ! getter . Value . Invoke ( ) )
200+ if ( configGetter . Value . IsActiveBuildTargetValid ( ) && ! configGetter . Value . GetAction . Invoke ( ) )
160201 {
161202 return false ;
162203 }
@@ -326,5 +367,10 @@ public static void ApplyXRSettings()
326367 }
327368#pragma warning restore 0618
328369 }
370+
371+ private static bool GetCapability ( PlayerSettings . WSACapability capability )
372+ {
373+ return MixedRealityOptimizeUtils . IsBuildTargetUWP ( ) ? PlayerSettings . WSA . GetCapability ( capability ) : true ;
374+ }
329375 }
330376}
0 commit comments