/// <summmary> /// <see cref="PropertyDrawer.OnGUI" /> /// </summmary> override public void OnGUI(Rect rect, SerializedProperty property, GUIContent label) { EditorGUI.BeginProperty(rect, label, property); EditorGUI.BeginChangeCheck(); ResourceReference reference; reference = property.objectReferenceValue as ResourceReference; Object resource; resource = AssetDatabase.LoadAssetAtPath(reference != null ? AssetDatabase.GUIDToAssetPath(reference.Guid) : null, ResourceType); resource = EditorGUI.ObjectField(rect, label, resource, ResourceType, false); if (EditorGUI.EndChangeCheck()) { if (resource != null) { reference = ResourceReferenceEditor.FindOrCreateReference(resource); property.objectReferenceValue = reference; } else if (reference != null) { reference = null; property.objectReferenceValue = null; } } EditorGUI.EndProperty(); }
private static void OnPostprocessAllAssets(string[] importedAssetPaths, string[] deletedAssetPaths, string[] movedAssetPaths, string[] movedFromAssetPaths) { if (deletedAssetPaths.Length != 0 || movedFromAssetPaths.Length != 0) { var assetGuids = ( AssetDatabase .FindAssets("t:ResourceReference") .Select(referenceGuid => ResourceReferenceEditor.ReferenceGuidToAssetGuid(referenceGuid)) ); try { AssetDatabase.StartAssetEditing(); foreach (string assetGuid in deletedAssetPaths.Select(path => AssetDatabase.AssetPathToGUID(path)).Intersect(assetGuids)) { string referencePath; referencePath = AssetDatabase.GUIDToAssetPath(ResourceReferenceEditor.AssetGuidToReferenceGuid(assetGuid)); if (!string.IsNullOrEmpty(referencePath)) { AssetDatabase.DeleteAsset(referencePath); } } foreach (string assetGuid in movedAssetPaths.Select(path => AssetDatabase.AssetPathToGUID(path)).Intersect(assetGuids)) { string referencePath; referencePath = AssetDatabase.GUIDToAssetPath(ResourceReferenceEditor.AssetGuidToReferenceGuid(assetGuid)); string newPath; newPath = ResourceReferenceEditor.GetReferencePath(assetGuid); if (string.IsNullOrEmpty(AssetDatabase.ValidateMoveAsset(referencePath, newPath))) { AssetDatabase.MoveAsset(referencePath, newPath); } } } finally { AssetDatabase.StopAssetEditing(); } } }