MenuItems.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using UnityEngine;
  2. using UnityEngine.U2D;
  3. using UnityEditor;
  4. namespace UnityEditor.U2D
  5. {
  6. static internal class MenuItems
  7. {
  8. const int k_SpriteAssetMenuPriority = 1;
  9. const int k_SpriteAtlasAssetMenuPriority = k_SpriteAssetMenuPriority + 11;
  10. const int k_SpriteGameObjectMenuPriority = 1;
  11. const int k_PhysicsGameObjectMenuPriority = 2;
  12. const int k_SpriteMaskGameObjectMenuPriority = 6;
  13. [MenuItem("Assets/Create/2D/Sprites/Square", priority = k_SpriteAssetMenuPriority)]
  14. static void AssetsCreateSpritesSquare(MenuCommand menuCommand)
  15. {
  16. ItemCreationUtility.CreateAssetObjectFromTemplate<Texture2D>("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Square.png");
  17. }
  18. [MenuItem("Assets/Create/2D/Sprites/Circle", priority = k_SpriteAssetMenuPriority)]
  19. static void AssetsCreateSpritesCircle(MenuCommand menuCommand)
  20. {
  21. ItemCreationUtility.CreateAssetObjectFromTemplate<Texture2D>("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Circle.png");
  22. }
  23. [MenuItem("Assets/Create/2D/Sprites/Capsule", priority = k_SpriteAssetMenuPriority)]
  24. static void AssetsCreateSpritesCapsule(MenuCommand menuCommand)
  25. {
  26. ItemCreationUtility.CreateAssetObjectFromTemplate<Texture2D>("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Capsule.png");
  27. }
  28. [MenuItem("Assets/Create/2D/Sprites/Isometric Diamond", priority = k_SpriteAssetMenuPriority)]
  29. static void AssetsCreateSpritesIsometricDiamond(MenuCommand menuCommand)
  30. {
  31. ItemCreationUtility.CreateAssetObjectFromTemplate<Texture2D>("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/IsometricDiamond.png");
  32. }
  33. [MenuItem("Assets/Create/2D/Sprites/Hexagon Flat-Top", priority = k_SpriteAssetMenuPriority)]
  34. static void AssetsCreateSpritesHexagonFlatTop(MenuCommand menuCommand)
  35. {
  36. ItemCreationUtility.CreateAssetObjectFromTemplate<Texture2D>("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonFlatTop.png");
  37. }
  38. [MenuItem("Assets/Create/2D/Sprites/Hexagon Pointed-Top", priority = k_SpriteAssetMenuPriority)]
  39. static void AssetsCreateSpritesHexagonPointedTop(MenuCommand menuCommand)
  40. {
  41. ItemCreationUtility.CreateAssetObjectFromTemplate<Texture2D>("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonPointedTop.png");
  42. }
  43. [MenuItem("Assets/Create/2D/Sprites/9-Sliced", priority = k_SpriteAssetMenuPriority)]
  44. static void AssetsCreateSprites9Sliced(MenuCommand menuCommand)
  45. {
  46. ItemCreationUtility.CreateAssetObjectFromTemplate<Texture2D>("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/9Sliced.png");
  47. }
  48. internal class DoCreateSpriteAtlas : ProjectWindowCallback.EndNameEditAction
  49. {
  50. public int sides;
  51. public override void Action(int instanceId, string pathName, string resourceFile)
  52. {
  53. var spriteAtlasAsset = new SpriteAtlasAsset();
  54. UnityEditorInternal.InternalEditorUtility.SaveToSerializedFileAndForget(new Object[] { spriteAtlasAsset }, pathName, true);
  55. AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
  56. }
  57. }
  58. static private void CreateSpriteAtlas()
  59. {
  60. var icon = EditorGUIUtility.IconContent<SpriteAtlasAsset>().image as Texture2D;
  61. DoCreateSpriteAtlas action = ScriptableObject.CreateInstance<DoCreateSpriteAtlas>();
  62. ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, action, "New Sprite Atlas.spriteatlasv2", icon, null);
  63. }
  64. [MenuItem("Assets/Create/2D/Sprite Atlas", priority = k_SpriteAtlasAssetMenuPriority)]
  65. static void AssetsCreateSpriteAtlas(MenuCommand menuCommand)
  66. {
  67. if (EditorSettings.spritePackerMode == SpritePackerMode.SpriteAtlasV2)
  68. CreateSpriteAtlas();
  69. else
  70. ItemCreationUtility.CreateAssetObject<SpriteAtlas>("New Sprite Atlas.spriteatlas");
  71. }
  72. static GameObject CreateSpriteRendererGameObject(string name, string spritePath, MenuCommand menuCommand)
  73. {
  74. var go = ItemCreationUtility.CreateGameObject(name, menuCommand, new[] {typeof(SpriteRenderer)});
  75. var sr = go.GetComponent<SpriteRenderer>();
  76. sr.sprite = AssetDatabase.LoadAssetAtPath<Sprite>(spritePath);
  77. return go;
  78. }
  79. [MenuItem("GameObject/2D Object/Sprites/Square", priority = k_SpriteGameObjectMenuPriority)]
  80. static void GameObjectCreateSpritesSquare(MenuCommand menuCommand)
  81. {
  82. CreateSpriteRendererGameObject("Square", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Square.png", menuCommand);
  83. }
  84. [MenuItem("GameObject/2D Object/Sprites/Circle", priority = k_SpriteGameObjectMenuPriority)]
  85. static void GameObjectCreateSpritesCircle(MenuCommand menuCommand)
  86. {
  87. CreateSpriteRendererGameObject("Circle", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Circle.png", menuCommand);
  88. }
  89. [MenuItem("GameObject/2D Object/Sprites/Capsule", priority = k_SpriteGameObjectMenuPriority)]
  90. static void GameObjectCreateSpritesCapsule(MenuCommand menuCommand)
  91. {
  92. CreateSpriteRendererGameObject("Capsule", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Capsule.png", menuCommand);
  93. }
  94. [MenuItem("GameObject/2D Object/Sprites/Isometric Diamond", priority = k_SpriteGameObjectMenuPriority)]
  95. static void GameObjectCreateSpritesIsometricDiamond(MenuCommand menuCommand)
  96. {
  97. CreateSpriteRendererGameObject("Isometric Diamond", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/IsometricDiamond.png", menuCommand);
  98. }
  99. [MenuItem("GameObject/2D Object/Sprites/Hexagon Flat-Top", priority = k_SpriteGameObjectMenuPriority)]
  100. static void GameObjectCreateSpritesHexagonFlatTop(MenuCommand menuCommand)
  101. {
  102. CreateSpriteRendererGameObject("Hexagon Flat-Top", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonFlatTop.png", menuCommand);
  103. }
  104. [MenuItem("GameObject/2D Object/Sprites/Hexagon Pointed-Top", priority = k_SpriteGameObjectMenuPriority)]
  105. static void GameObjectCreateSpritesHexagonPointedTop(MenuCommand menuCommand)
  106. {
  107. CreateSpriteRendererGameObject("Hexagon Pointed-Top", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonPointedTop.png", menuCommand);
  108. }
  109. [MenuItem("GameObject/2D Object/Sprites/9-Sliced", priority = k_SpriteGameObjectMenuPriority)]
  110. static void GameObjectCreateSprites9Sliced(MenuCommand menuCommand)
  111. {
  112. var go = CreateSpriteRendererGameObject("9-Sliced", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/9Sliced.png", menuCommand);
  113. var sr = go.GetComponent<SpriteRenderer>();
  114. if (sr.drawMode == SpriteDrawMode.Simple)
  115. {
  116. sr.drawMode = SpriteDrawMode.Tiled;
  117. sr.tileMode = SpriteTileMode.Continuous;
  118. }
  119. }
  120. [MenuItem("GameObject/2D Object/Physics/Static Sprite", priority = k_PhysicsGameObjectMenuPriority)]
  121. static void GameObjectCreatePhysicsStaticSprite(MenuCommand menuCommand)
  122. {
  123. var go = ItemCreationUtility.CreateGameObject("Static Sprite", menuCommand, new[] {typeof(SpriteRenderer), typeof(BoxCollider2D), typeof(Rigidbody2D)});
  124. var sr = go.GetComponent<SpriteRenderer>();
  125. if (sr.sprite == null)
  126. sr.sprite = AssetDatabase.LoadAssetAtPath<Sprite>(
  127. "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Square.png");
  128. var rigidBody = go.GetComponent<Rigidbody2D>();
  129. rigidBody.bodyType = RigidbodyType2D.Static;
  130. var boxCollider2D = go.GetComponent<BoxCollider2D>();
  131. boxCollider2D.size = sr.sprite.rect.size / sr.sprite.pixelsPerUnit;
  132. }
  133. [MenuItem("GameObject/2D Object/Physics/Dynamic Sprite", priority = k_PhysicsGameObjectMenuPriority)]
  134. static void GameObjectCreatePhysicsDynamicSprite(MenuCommand menuCommand)
  135. {
  136. var go = ItemCreationUtility.CreateGameObject("Dynamic Sprite", menuCommand, new[] {typeof(SpriteRenderer), typeof(CircleCollider2D), typeof(Rigidbody2D)});
  137. var sr = go.GetComponent<SpriteRenderer>();
  138. if (sr.sprite == null)
  139. sr.sprite = AssetDatabase.LoadAssetAtPath<Sprite>(
  140. "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Circle.png");
  141. var rigidBody = go.GetComponent<Rigidbody2D>();
  142. rigidBody.bodyType = RigidbodyType2D.Dynamic;
  143. }
  144. [MenuItem("GameObject/2D Object/Sprite Mask", priority = k_SpriteMaskGameObjectMenuPriority)]
  145. static void GameObjectCreateSpriteMask(MenuCommand menuCommand)
  146. {
  147. var go = ItemCreationUtility.CreateGameObject("Sprite Mask", menuCommand, new[] {typeof(SpriteMask)});
  148. go.GetComponent<SpriteMask>().sprite = AssetDatabase.LoadAssetAtPath<Sprite>(
  149. "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/CircleMask.png");
  150. }
  151. }
  152. }