static void DrawRemapGUI <T>(ScriptedImporter importer, IEnumerable <string> names) where T : UnityEngine.Object { EditorGUI.indentLevel++; var map = importer.GetExternalObjectMap() .Select(x => (x.Key.name, x.Value as T)) .Where(x => x.Item2 != null) .ToDictionary(x => x.Item1, x => x.Item2) ; foreach (var name in names) { if (string.IsNullOrEmpty(name)) { throw new System.ArgumentNullException(); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(name); map.TryGetValue(name, out T value); var asset = EditorGUILayout.ObjectField(value, typeof(T), true) as T; if (asset != value) { importer.SetExternalUnityObject(new AssetImporter.SourceAssetIdentifier(value), asset); } EditorGUILayout.EndHorizontal(); } EditorGUI.indentLevel--; }