示例#1
0
        /// <summary>
        /// Create the collider for this layout and GameObject.
        /// </summary>
        /// <param name="layout">The layout.</param>
        /// <param name="root">The root game object.</param>
        public static void Create(Layout layout, GameObject root)
        {
            ColliderCreator creator = new ColliderCreator();

            creator.layout = layout;
            creator.ApplyRootCollider(root);
        }
示例#2
0
        /// <summary>
        /// Create the sprites.
        /// </summary>
        public void CreateSprites(Layer startingLayer)
        {
            // line up the ducks
            layout.UpdateSpriteLayerProperties();

            // create the root object to attach all these sprites
            string assetPathToDocument = AssetDatabase.GetAssetPath(layout.layoutDocumentAsset);
            string rootName            = Path.GetFileNameWithoutExtension(assetPathToDocument).Replace(Backpack.MapExtension, "");

            // do we need to trim the sprite bounds?
            if (layout.trimToSprites)
            {
                // calculate the new bounds and cache it.
                layout.trimmedSpriteBounds = layout.GetTrimmedSpriteBounds();
            }

            // are we starting from a specific node?
            if (startingLayer != null)
            {
                rootName = layout.GetBestName(startingLayer);
            }

            GameObject root;

            // recreate the nested photoshop layers?
            if (layout.preservePhotoshopLayers)
            {
                Layer fromHere = startingLayer;
                if (fromHere == null)
                {
                    fromHere = layout.document.root;
                }
                root = CreateGameObjectHierarchyForLayer(fromHere, null);
                if (startingLayer == null && root != null)
                {
                    root.name = rootName;
                }
            }
            else
            {
                List <UnitySpriteLayer> spriteLayers = layout.GetSelectedSpriteLayers();

                // if we're just doing 1 sprite, make that sprite become the root
                if (spriteLayers.Count == 1)
                {
                    root = CreateGameObjectForSpriteLayer(spriteLayers[0], null);
                }
                else
                {
                    root = new GameObject(rootName);
                    // nah, just use flat sprites
                    foreach (UnitySpriteLayer spriteLayer in spriteLayers)
                    {
                        CreateGameObjectForSpriteLayer(spriteLayer, root.transform);
                    }
                }
            }


            // if we didn't create anything, jet.
            if (root == null)
            {
                return;
            }

            // should we apply a collider to the root?
            ColliderCreator.Create(layout, root);

            // scale it if the user wants
            root.transform.localScale = layout.scale;

            Undo.RegisterCreatedObjectUndo(root, Backpack.Name + " GameObject");

            // if we have a selection, tuck it under that
            if (Selection.activeTransform)
            {
                root.transform.parent = Selection.activeTransform;
            }


            // notify the user
            EditorGUIUtility.PingObject(root);
        }