public override void OnInspectorGUI() { EditorGUI.BeginChangeCheck(); if (Event.current.commandName == "ObjectSelectorUpdated") { var texturePath = AssetDatabase.GetAssetPath(tile.m_Tileset); var oldSprites = AssetDatabase.LoadAllAssetsAtPath(texturePath).OfType <Sprite>().ToArray(); var selectedObject = EditorGUIUtility.GetObjectPickerObject() as Texture2D; var newPath = AssetDatabase.GetAssetPath(selectedObject); var newSprites = AssetDatabase.LoadAllAssetsAtPath(newPath).OfType <Sprite>().ToArray(); Array.Sort(oldSprites, (a, b) => a.name.CompareTo(b.name)); Array.Sort(newSprites, (a, b) => a.name.CompareTo(b.name)); try { foreach (var p in tile.m_TilingRules) { if (p.m_Sprites.Length > 0) { for (int i = 0; i < p.m_Sprites.Length; i++) { if (p.m_Sprites[i] != null) { var oldName = p.m_Sprites[i].name; var index = Array.FindIndex(oldSprites, t => t.name.Equals(oldName)); if (index < 0) { Debug.LogError($"Can't finde {oldName} in old array."); } else { p.m_Sprites[i] = newSprites[index]; } } } } } } catch (Exception ex) { Debug.LogError(ex); } } tile.m_Tileset = EditorGUILayout.ObjectField("Texture 2D ", tile.m_Tileset, typeof(Texture2D), false) as Texture2D; tile.m_DefaultSprite = EditorGUILayout.ObjectField("Default Sprite", tile.m_DefaultSprite, typeof(Sprite), false) as Sprite; tile.m_DefaultGameObject = EditorGUILayout.ObjectField("Default Game Object", tile.m_DefaultGameObject, typeof(GameObject), false) as GameObject; tile.m_DefaultColliderType = (Tile.ColliderType)EditorGUILayout.EnumPopup("Default Collider", tile.m_DefaultColliderType); DrawCustomFields(false); EditorGUILayout.Space(); if (m_ReorderableList != null) { m_ReorderableList.DoLayoutList(); } if (EditorGUI.EndChangeCheck()) { SaveTile(); } }