/// <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); }
/// <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); }