There’s a current issue in the new Localization package I’ve been trying out which raised the need for this feature. Assets are not being made dirty when they should be. It can be tedious to find out if an asset is dirty because you need to inspect the file in a text editor to see if anything has been changed.
I’d love to see a new feature in the Editor that shows the dirty state of assets like the inspector does with prefab instance overrides; a light blue line at the edge of the window.

Here’s a simple script script that shows this state. It’s ugly, probably very inefficient, but it does help isolate some of these “data not saved” issues
public static class SetDirtyMenu {
private static readonly Color dirtyObjectColor = new Color(1f / 255f, 153f / 255f, 235f / 255f, 0.75f);
#region Private Methods
[InitializeOnLoadMethod]
private static void Initialize() {
EditorApplication.projectWindowItemOnGUI -= OnProjectWindowGUI;
EditorApplication.projectWindowItemOnGUI += OnProjectWindowGUI;
}
[MenuItem("Assets/Set Dirty")]
private static void SetObjectsDirty() {
var objects = GetObjects();
foreach (var obj in objects) {
EditorUtility.SetDirty(obj);
}
}
[MenuItem("Assets/Set Dirty", true)]
private static bool ValidateSetObjectsDirty() {
return GetObjects().Length > 0;
}
private static Object[] GetObjects() {
return Selection.objects.Where(t => EditorUtility.IsPersistent(t)).ToArray();
}
private static void OnProjectWindowGUI(string guid, Rect selectionRect) {
if (Event.current.type != EventType.Repaint) {
return;
}
string path = AssetDatabase.GUIDToAssetPath(guid);
if (AssetDatabase.IsMainAssetAtPathLoaded(path)) {
var obj = AssetDatabase.LoadMainAssetAtPath(path);
if (EditorUtility.IsDirty(obj)) {
selectionRect.x = 0;
selectionRect.width = 2;
EditorGUI.DrawRect(selectionRect, dirtyObjectColor);
}
}
}
#endregion
}
