using UnityEngine; using UnityEngine.U2D; using UnityEditor; namespace UnityEditor.U2D { static internal class MenuItems { enum SpriteAssetMenuPriority : int { Triangle = 1, Square, Circle, Capsule, IsometricDiamond, HexagonFlatTop, HexagonPointTop, Sliced9 } enum SpriteAtlasAssetMenuPriority : int { SpriteAtlas = SpriteAssetMenuPriority.Triangle + 11 } enum SpriteGameObjectMenuPriority : int { Triangle = 1, Square, Circle, Capsule, IsometricDiamond, HexagonFlatTop, HexagonPointTop, Sliced9 } enum PhysicsGameObjectMenuPriority : int { StaticSprite = 2, DynamicSprite } enum SpriteMaskGameObjectMenuPriority : int { SpriteMask = 6 } [MenuItem("Assets/Create/2D/Sprites/Triangle", priority = (int)SpriteAssetMenuPriority.Triangle)] static void AssetsCreateSpritesTriangle(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Triangle.png"); } [MenuItem("Assets/Create/2D/Sprites/Square", priority = (int)SpriteAssetMenuPriority.Square)] static void AssetsCreateSpritesSquare(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Square.png"); } [MenuItem("Assets/Create/2D/Sprites/Circle", priority = (int)SpriteAssetMenuPriority.Circle)] static void AssetsCreateSpritesCircle(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Circle.png"); } [MenuItem("Assets/Create/2D/Sprites/Capsule", priority = (int)SpriteAssetMenuPriority.Capsule)] static void AssetsCreateSpritesCapsule(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Capsule.png"); } [MenuItem("Assets/Create/2D/Sprites/Isometric Diamond", priority = (int)SpriteAssetMenuPriority.IsometricDiamond)] static void AssetsCreateSpritesIsometricDiamond(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/IsometricDiamond.png"); } [MenuItem("Assets/Create/2D/Sprites/Hexagon Flat Top", priority = (int)SpriteAssetMenuPriority.HexagonFlatTop)] static void AssetsCreateSpritesHexagonFlatTop(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonFlatTop.png"); } [MenuItem("Assets/Create/2D/Sprites/Hexagon Point Top", priority = (int)SpriteAssetMenuPriority.HexagonPointTop)] static void AssetsCreateSpritesHexagonPointTop(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonPointTop.png"); } [MenuItem("Assets/Create/2D/Sprites/9-Sliced", priority = (int)SpriteAssetMenuPriority.Sliced9)] static void AssetsCreateSprites9Sliced(MenuCommand menuCommand) { ItemCreationUtility.CreateAssetObjectFromTemplate("Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/9Sliced.png"); } internal class DoCreateSpriteAtlas : ProjectWindowCallback.EndNameEditAction { public int sides; public override void Action(int instanceId, string pathName, string resourceFile) { var spriteAtlasAsset = new SpriteAtlasAsset(); UnityEditorInternal.InternalEditorUtility.SaveToSerializedFileAndForget(new Object[] { spriteAtlasAsset }, pathName, true); AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); } } static private void CreateSpriteAtlas() { var icon = EditorGUIUtility.IconContent().image as Texture2D; DoCreateSpriteAtlas action = ScriptableObject.CreateInstance(); ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, action, "New Sprite Atlas.spriteatlasv2", icon, null); } [MenuItem("Assets/Create/2D/Sprite Atlas", priority = (int)SpriteAtlasAssetMenuPriority.SpriteAtlas)] static void AssetsCreateSpriteAtlas(MenuCommand menuCommand) { if (EditorSettings.spritePackerMode == SpritePackerMode.SpriteAtlasV2 || EditorSettings.spritePackerMode == SpritePackerMode.SpriteAtlasV2Build) CreateSpriteAtlas(); else ItemCreationUtility.CreateAssetObject("New Sprite Atlas.spriteatlas"); } static GameObject CreateSpriteRendererGameObject(string name, string spritePath, MenuCommand menuCommand) { var go = ItemCreationUtility.CreateGameObject(name, menuCommand, new[] {typeof(SpriteRenderer)}); var sr = go.GetComponent(); sr.sprite = AssetDatabase.LoadAssetAtPath(spritePath); return go; } [MenuItem("GameObject/2D Object/Sprites/Triangle", priority = (int)SpriteAssetMenuPriority.Triangle)] static void GameObjectCreateSpritesTriangle(MenuCommand menuCommand) { CreateSpriteRendererGameObject("Triangle", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Triangle.png", menuCommand); } [MenuItem("GameObject/2D Object/Sprites/Square", priority = (int)SpriteAssetMenuPriority.Square)] static void GameObjectCreateSpritesSquare(MenuCommand menuCommand) { CreateSpriteRendererGameObject("Square", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Square.png", menuCommand); } [MenuItem("GameObject/2D Object/Sprites/Circle", priority = (int)SpriteAssetMenuPriority.Circle)] static void GameObjectCreateSpritesCircle(MenuCommand menuCommand) { CreateSpriteRendererGameObject("Circle", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Circle.png", menuCommand); } [MenuItem("GameObject/2D Object/Sprites/Capsule", priority = (int)SpriteAssetMenuPriority.Capsule)] static void GameObjectCreateSpritesCapsule(MenuCommand menuCommand) { CreateSpriteRendererGameObject("Capsule", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Capsule.png", menuCommand); } [MenuItem("GameObject/2D Object/Sprites/Isometric Diamond", priority = (int)SpriteAssetMenuPriority.IsometricDiamond)] static void GameObjectCreateSpritesIsometricDiamond(MenuCommand menuCommand) { CreateSpriteRendererGameObject("Isometric Diamond", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/IsometricDiamond.png", menuCommand); } [MenuItem("GameObject/2D Object/Sprites/Hexagon Flat Top", priority = (int)SpriteAssetMenuPriority.HexagonFlatTop)] static void GameObjectCreateSpritesHexagonFlatTop(MenuCommand menuCommand) { CreateSpriteRendererGameObject("Hexagon Flat Top", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonFlatTop.png", menuCommand); } [MenuItem("GameObject/2D Object/Sprites/Hexagon Point Top", priority = (int)SpriteAssetMenuPriority.HexagonPointTop)] static void GameObjectCreateSpritesHexagonPointedTop(MenuCommand menuCommand) { CreateSpriteRendererGameObject("Hexagon Point Top", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/HexagonPointTop.png", menuCommand); } [MenuItem("GameObject/2D Object/Sprites/9-Sliced", priority = (int)SpriteAssetMenuPriority.Sliced9)] static void GameObjectCreateSprites9Sliced(MenuCommand menuCommand) { var go = CreateSpriteRendererGameObject("9-Sliced", "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/9Sliced.png", menuCommand); var sr = go.GetComponent(); if (sr.drawMode == SpriteDrawMode.Simple) { sr.drawMode = SpriteDrawMode.Tiled; sr.tileMode = SpriteTileMode.Continuous; } } [MenuItem("GameObject/2D Object/Physics/Static Sprite", priority = (int)PhysicsGameObjectMenuPriority.StaticSprite)] static void GameObjectCreatePhysicsStaticSprite(MenuCommand menuCommand) { var go = ItemCreationUtility.CreateGameObject("Static Sprite", menuCommand, new[] {typeof(SpriteRenderer), typeof(BoxCollider2D), typeof(Rigidbody2D)}); var sr = go.GetComponent(); if (sr.sprite == null) sr.sprite = AssetDatabase.LoadAssetAtPath( "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Square.png"); var rigidBody = go.GetComponent(); rigidBody.bodyType = RigidbodyType2D.Static; var boxCollider2D = go.GetComponent(); boxCollider2D.size = sr.sprite.rect.size / sr.sprite.pixelsPerUnit; } [MenuItem("GameObject/2D Object/Physics/Dynamic Sprite", priority = (int)PhysicsGameObjectMenuPriority.DynamicSprite)] static void GameObjectCreatePhysicsDynamicSprite(MenuCommand menuCommand) { var go = ItemCreationUtility.CreateGameObject("Dynamic Sprite", menuCommand, new[] {typeof(SpriteRenderer), typeof(CircleCollider2D), typeof(Rigidbody2D)}); var sr = go.GetComponent(); if (sr.sprite == null) sr.sprite = AssetDatabase.LoadAssetAtPath( "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/v2/Circle.png"); var rigidBody = go.GetComponent(); rigidBody.bodyType = RigidbodyType2D.Dynamic; } [MenuItem("GameObject/2D Object/Sprite Mask", priority = (int)SpriteMaskGameObjectMenuPriority.SpriteMask)] static void GameObjectCreateSpriteMask(MenuCommand menuCommand) { var go = ItemCreationUtility.CreateGameObject("Sprite Mask", menuCommand, new[] {typeof(SpriteMask)}); go.GetComponent().sprite = AssetDatabase.LoadAssetAtPath( "Packages/com.unity.2d.sprite/Editor/ObjectMenuCreation/DefaultAssets/Textures/CircleMask.png"); } } }