Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using System.IO;
  3. using UnityEngine;
  4. namespace UnityEditor.U2D
  5. {
  6. static internal class ItemCreationUtility
  7. {
  8. static internal Action<int, ProjectWindowCallback.EndNameEditAction, string, Texture2D, string> StartNewAssetNameEditingDelegate = ProjectWindowUtil.StartNameEditingIfProjectWindowExists;
  9. static public GameObject CreateGameObject(string name, MenuCommand menuCommand, params Type[] components)
  10. {
  11. var parent = menuCommand.context as GameObject;
  12. var newGO = ObjectFactory.CreateGameObject(name, components);
  13. newGO.name = name;
  14. Selection.activeObject = newGO;
  15. GOCreationCommands.Place(newGO, parent);
  16. if (EditorSettings.defaultBehaviorMode == EditorBehaviorMode.Mode2D)
  17. {
  18. var position = newGO.transform.position;
  19. position.z = 0;
  20. newGO.transform.position = position;
  21. }
  22. Undo.RegisterCreatedObjectUndo(newGO, string.Format("Create {0}", name));
  23. return newGO;
  24. }
  25. static public T CreateAssetObjectFromTemplate<T>(string sourcePath) where T : UnityEngine.Object
  26. {
  27. var assetSelectionPath = AssetDatabase.GetAssetPath(Selection.activeObject);
  28. var isFolder = false;
  29. if (!string.IsNullOrEmpty(assetSelectionPath))
  30. isFolder = File.GetAttributes(assetSelectionPath).HasFlag(FileAttributes.Directory);
  31. var path = ProjectWindowUtil.GetActiveFolderPath();
  32. if (isFolder)
  33. {
  34. path = assetSelectionPath;
  35. }
  36. var fileName = Path.GetFileName(sourcePath);
  37. var destName = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(path, fileName));
  38. var icon = EditorGUIUtility.IconContent<T>().image as Texture2D;
  39. StartNewAssetNameEditing(sourcePath, destName, icon, ProjectBrowser.kAssetCreationInstanceID_ForNonExistingAssets);
  40. return Selection.activeObject as T;
  41. }
  42. static public T CreateAssetObject<T>(string name) where T : UnityEngine.Object
  43. {
  44. var assetSelectionPath = AssetDatabase.GetAssetPath(Selection.activeObject);
  45. var isFolder = false;
  46. if (!string.IsNullOrEmpty(assetSelectionPath))
  47. isFolder = File.GetAttributes(assetSelectionPath).HasFlag(FileAttributes.Directory);
  48. var path = ProjectWindowUtil.GetActiveFolderPath();
  49. if (isFolder)
  50. {
  51. path = assetSelectionPath;
  52. }
  53. var destName = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(path, name));
  54. var newObject = Activator.CreateInstance<T>();
  55. var icon = EditorGUIUtility.IconContent<T>().image as Texture2D;
  56. StartNewAssetNameEditing(null, destName, icon, newObject.GetInstanceID());
  57. return Selection.activeObject as T;
  58. }
  59. static private void StartNewAssetNameEditing(string source, string dest, Texture2D icon, int instanceId)
  60. {
  61. var action = ScriptableObject.CreateInstance<CreateAssetEndNameEditAction>();
  62. StartNewAssetNameEditingDelegate(instanceId, action, dest, icon, source);
  63. }
  64. internal class CreateAssetEndNameEditAction : ProjectWindowCallback.EndNameEditAction
  65. {
  66. public override void Action(int instanceId, string pathName, string resourceFile)
  67. {
  68. var uniqueName = AssetDatabase.GenerateUniqueAssetPath(pathName);
  69. if (instanceId == ProjectBrowser.kAssetCreationInstanceID_ForNonExistingAssets && !string.IsNullOrEmpty(resourceFile))
  70. {
  71. AssetDatabase.CopyAsset(resourceFile, uniqueName);
  72. instanceId = AssetDatabase.LoadMainAssetAtPath(uniqueName).GetInstanceID();
  73. }
  74. else
  75. {
  76. var obj = EditorUtility.InstanceIDToObject(instanceId);
  77. AssetDatabase.CreateAsset(obj, uniqueName);
  78. }
  79. ProjectWindowUtil.FrameObjectInProjectWindow(instanceId);
  80. }
  81. }
  82. }
  83. }