UnityEditor.ProjectWindowUtil.DuplicateSelectedAssets C# (CSharp) Method

DuplicateSelectedAssets() static private method

static private DuplicateSelectedAssets ( ) : void
return void
        internal static void DuplicateSelectedAssets()
        {
            AssetDatabase.Refresh();
            Object[] objects = Selection.objects;
            bool flag = true;
            foreach (Object obj2 in objects)
            {
                AnimationClip clip = obj2 as AnimationClip;
                if (((clip == null) || ((clip.hideFlags & HideFlags.NotEditable) == HideFlags.None)) || !AssetDatabase.Contains(clip))
                {
                    flag = false;
                }
            }
            ArrayList list = new ArrayList();
            bool flag2 = false;
            if (flag)
            {
                foreach (Object obj3 in objects)
                {
                    AnimationClip source = obj3 as AnimationClip;
                    if ((source != null) && ((source.hideFlags & HideFlags.NotEditable) != HideFlags.None))
                    {
                        string path = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(Path.GetDirectoryName(AssetDatabase.GetAssetPath(obj3)), source.name) + ".anim");
                        AnimationClip dest = new AnimationClip();
                        EditorUtility.CopySerialized(source, dest);
                        AssetDatabase.CreateAsset(dest, path);
                        list.Add(path);
                    }
                }
            }
            else
            {
                Object[] filtered = Selection.GetFiltered(typeof(Object), SelectionMode.Assets);
                foreach (Object obj4 in filtered)
                {
                    string assetPath = AssetDatabase.GetAssetPath(obj4);
                    string newPath = AssetDatabase.GenerateUniqueAssetPath(assetPath);
                    if (newPath.Length != 0)
                    {
                        flag2 |= !AssetDatabase.CopyAsset(assetPath, newPath);
                    }
                    else
                    {
                        flag2 |= true;
                    }
                    if (!flag2)
                    {
                        list.Add(newPath);
                    }
                }
            }
            AssetDatabase.Refresh();
            Object[] objArray6 = new Object[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                objArray6[i] = AssetDatabase.LoadMainAssetAtPath(list[i] as string);
            }
            Selection.objects = objArray6;
        }

Usage Example

示例#1
0
 private void HandleCommandEvents(int treeViewKeyboardControlID)
 {
     if (GUIUtility.keyboardControl == treeViewKeyboardControlID)
     {
         EventType type = Event.current.type;
         switch (type)
         {
         case EventType.ExecuteCommand:
         case EventType.ValidateCommand:
         {
             bool flag = type == EventType.ExecuteCommand;
             if ((Event.current.commandName == "Delete") || (Event.current.commandName == "SoftDelete"))
             {
                 Event.current.Use();
                 if (flag)
                 {
                     ProjectBrowser.DeleteSelectedAssets(true);
                 }
             }
             else if (Event.current.commandName == "Duplicate")
             {
                 Event.current.Use();
                 if (flag)
                 {
                     ProjectWindowUtil.DuplicateSelectedAssets();
                 }
             }
             break;
         }
         }
     }
 }
All Usage Examples Of UnityEditor.ProjectWindowUtil::DuplicateSelectedAssets