Skip to content

Commit 0356253

Browse files
author
Dmytro Ivanov
authored
FIX: Not adding temp settings object to preloaded assets, and actually setting dirty flag so editor saves asset on exit (#1590)
1 parent 2e9d2c2 commit 0356253

2 files changed

Lines changed: 17 additions & 38 deletions

File tree

Packages/com.unity.inputsystem/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ however, it has to be formatted properly to pass verification tests.
1212

1313
### Fixed
1414
- Fixed `ArgumentNullException` when opening the Prefab Overrides window and selecting a component with an `InputAction`.
15+
- Fixed `{fileID: 0}` getting appended to `ProjectSettings.asset` file when building a project ([case ISXB-296](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-296)).
1516

1617
## [1.4.3] - 2022-09-23
1718

Packages/com.unity.inputsystem/InputSystem/Editor/Settings/InputSettingsBuildProvider.cs

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,65 +9,43 @@ namespace UnityEngine.InputSystem.Editor
99
{
1010
internal class InputSettingsBuildProvider : IPreprocessBuildWithReport, IPostprocessBuildWithReport
1111
{
12-
private InputSettings m_SettingsAddedToPreloadedAssets;
13-
1412
public int callbackOrder => 0;
1513

1614
public void OnPreprocessBuild(BuildReport report)
1715
{
1816
if (InputSystem.settings == null)
1917
return;
2018

21-
var wasDirty = IsPlayerSettingsDirty();
22-
m_SettingsAddedToPreloadedAssets = null;
19+
// If we operate on temporary object instead of input setting asset,
20+
// adding temporary asset would result in preloadedAssets containing null object "{fileID: 0}".
21+
// Hence we ignore adding temporary objects to preloaded assets.
22+
if (!EditorUtility.IsPersistent(InputSystem.settings))
23+
return;
2324

2425
// Add InputSettings object assets, if it's not in there already.
2526
var preloadedAssets = PlayerSettings.GetPreloadedAssets();
2627
if (!preloadedAssets.Contains(InputSystem.settings))
2728
{
28-
m_SettingsAddedToPreloadedAssets = InputSystem.settings;
29-
ArrayHelpers.Append(ref preloadedAssets, m_SettingsAddedToPreloadedAssets);
29+
ArrayHelpers.Append(ref preloadedAssets, InputSystem.settings);
3030
PlayerSettings.SetPreloadedAssets(preloadedAssets);
3131
}
32-
33-
if (!wasDirty)
34-
ClearPlayerSettingsDirtyFlag();
3532
}
3633

3734
public void OnPostprocessBuild(BuildReport report)
3835
{
39-
if (m_SettingsAddedToPreloadedAssets == null)
40-
return;
41-
42-
var wasDirty = IsPlayerSettingsDirty();
43-
44-
// Revert back to original state.
36+
// Revert back to original state by removing all input settings from preloaded assets.
4537
var preloadedAssets = PlayerSettings.GetPreloadedAssets();
46-
var index = preloadedAssets.IndexOfReference<Object, Object>(m_SettingsAddedToPreloadedAssets);
47-
if (index != -1)
38+
while (preloadedAssets != null && preloadedAssets.Length > 0)
4839
{
49-
ArrayHelpers.EraseAt(ref preloadedAssets, index);
50-
PlayerSettings.SetPreloadedAssets(preloadedAssets);
40+
var index = preloadedAssets.IndexOf(x => x is InputSettings);
41+
if (index != -1)
42+
{
43+
ArrayHelpers.EraseAt(ref preloadedAssets, index);
44+
PlayerSettings.SetPreloadedAssets(preloadedAssets);
45+
}
46+
else
47+
break;
5148
}
52-
m_SettingsAddedToPreloadedAssets = null;
53-
54-
if (!wasDirty)
55-
ClearPlayerSettingsDirtyFlag();
56-
}
57-
58-
private static bool IsPlayerSettingsDirty()
59-
{
60-
var settings = Resources.FindObjectsOfTypeAll<PlayerSettings>();
61-
if (settings != null && settings.Length > 0)
62-
return EditorUtility.IsDirty(settings[0]);
63-
return false;
64-
}
65-
66-
private static void ClearPlayerSettingsDirtyFlag()
67-
{
68-
var settings = Resources.FindObjectsOfTypeAll<PlayerSettings>();
69-
if (settings != null && settings.Length > 0)
70-
EditorUtility.ClearDirty(settings[0]);
7149
}
7250
}
7351
}

0 commit comments

Comments
 (0)