|
3 | 3 | using System.Linq; |
4 | 4 | using UnityEditor; |
5 | 5 |
|
| 6 | +#if UNITY_6000_0_OR_NEWER |
| 7 | +using System.Reflection; |
| 8 | +using UnityEditor.Build.Profile; |
| 9 | +#endif |
| 10 | + |
6 | 11 | namespace UnityEngine.InputSystem.Editor |
7 | 12 | { |
8 | 13 | internal static class EditorPlayerSettingHelpers |
@@ -154,7 +159,23 @@ private static int TupleToActiveInputHandler((bool newSystemEnabled, bool oldSys |
154 | 159 |
|
155 | 160 | private static SerializedProperty GetPropertyOrNull(string name) |
156 | 161 | { |
| 162 | +#if UNITY_6000_0_OR_NEWER |
| 163 | + // HOTFIX: the code below works around an issue causing an infinite reimport loop |
| 164 | + // this will be replaced by a call to an API in the editor instead of using reflection once it is available |
| 165 | + var buildProfileType = typeof(BuildProfile); |
| 166 | + var globalPlayerSettingsField = buildProfileType.GetField("s_GlobalPlayerSettings", BindingFlags.Static | BindingFlags.NonPublic); |
| 167 | + var playerSettings = (PlayerSettings)globalPlayerSettingsField.GetValue(null); |
| 168 | + var activeBuildProfile = BuildProfile.GetActiveBuildProfile(); |
| 169 | + if (activeBuildProfile != null) |
| 170 | + { |
| 171 | + var playerSettingsOverrideField = buildProfileType.GetField("m_PlayerSettings", BindingFlags.Instance | BindingFlags.NonPublic); |
| 172 | + var playerSettingsOverride = (PlayerSettings)playerSettingsOverrideField.GetValue(activeBuildProfile); |
| 173 | + if (playerSettingsOverride != null) |
| 174 | + playerSettings = playerSettingsOverride; |
| 175 | + } |
| 176 | +#else |
157 | 177 | var playerSettings = Resources.FindObjectsOfTypeAll<PlayerSettings>().FirstOrDefault(); |
| 178 | +#endif |
158 | 179 | if (playerSettings == null) |
159 | 180 | return null; |
160 | 181 | var playerSettingsObject = new SerializedObject(playerSettings); |
|
0 commit comments