private bool PrepareAsset(PsdNode node) { TextureImporter importer = AssetImporter.GetAtPath(node.AssetPath(baseAssetPath)) as TextureImporter; if (!importer) { EditorUtility.DisplayDialog( "Error", "Failed loading asset at \n" + node.AssetPath(baseAssetPath) + "\n" + "Make sure you selected the right \"Assets Folder\" generated by " + Psd2Unity.NAME + ".", "OK" ); return(false); } importer.textureType = TextureImporterType.Sprite; importer.spritePixelsToUnits = (float)setting["pixelsToUnits"]; TextureImporterSettings settings = new TextureImporterSettings(); importer.ReadTextureSettings(settings); settings.spriteAlignment = (int)setting["pivot"]; importer.SetTextureSettings(settings); AssetDatabase.ImportAsset(node.AssetPath(baseAssetPath)); return(true); }
private int ProcessNodeRecursively(PsdNode node, int sort, GameObject parentObject) { if (node.fileName != null) { if (!PrepareAsset(node)) { return(sort); } GameObject childObject = CreateGameObject(node, sort); childObject.transform.parent = parentObject.transform; sort++; } else if (node.children.Count > 0) { if (sort != 0 && (bool)setting["nestLayers"]) { GameObject childObject = new GameObject(); childObject.name = node.name; childObject.transform.parent = parentObject.transform; parentObject = childObject; } while (node.children.Count > 0) { sort = ProcessNodeRecursively(node.children.Pop(), sort, parentObject); } } return(sort); }
static void Compose() { if (!structureObject) { EditorUtility.DisplayDialog( "Warning", "Please select a structure file generated by " + NAME + " to continue.", "OK" ); return; } if (!baseAssetObject) { EditorUtility.DisplayDialog( "Warning", "Please select assets folder generated by " + NAME + " to continue.", "OK" ); return; } baseAssetPath = AssetDatabase.GetAssetPath(baseAssetObject); string dataPath = Application.dataPath; string structurePath = AssetDatabase.GetAssetPath(structureObject); string structureFilePath = dataPath.Substring(0, dataPath.Length - 6) + structurePath; PsdNode structure = ReadStructure(structureFilePath); string rootName = Regex.Replace(structurePath, "^.*?([^/]+?)" + structureSuffix + "$", "$1"); Unity2DProcessor processor = new Unity2DProcessor(baseAssetPath, setting); processor.process(structure, rootName); }
public void process(PsdNode structure, string rootName) { GameObject root = new GameObject(); root.name = rootName; ProcessNodeRecursively(structure, 0, root); }
private GameObject CreateGameObject(PsdNode ele, int sort) { Sprite sprite = AssetDatabase.LoadAssetAtPath(ele.AssetPath(baseAssetPath), typeof(Sprite)) as Sprite; GameObject gameObject = new GameObject(); gameObject.name = ele.name; SpriteRenderer renderer = gameObject.AddComponent <SpriteRenderer>(); renderer.sprite = sprite; if ((bool)setting["useOrderInLayer"]) { renderer.sortingOrder = sort; } renderer.sortingLayerName = (string)setting["sortingLayerName"]; Vector2 position = new Vector2(ele.left, ele.top); switch ((int)setting["pivotIndex"]) { case 0: position.x += ele.width / 2; position.y += ele.height / 2; break; case 1: break; case 2: position.x += ele.width / 2; break; case 3: position.x += ele.width; break; case 4: position.y += ele.height / 2; break; case 5: position.x += ele.width; position.y += ele.height / 2; break; case 6: position.y += ele.height; break; case 7: position.x += ele.width / 2; position.y += ele.height; break; case 8: position.x += ele.width; position.y += ele.height; break; } gameObject.transform.localPosition = new Vector3( position.x / (float)setting["pixelsToUnits"] * (float)setting["scale"], -position.y / (float)setting["pixelsToUnits"] * (float)setting["scale"], -sort * (float)setting["zMultiplier"] ); gameObject.transform.localScale = new Vector3( (float)setting["scale"], (float)setting["scale"], (float)setting["scale"] ); return(gameObject); }
private static PsdNode ReadStructure(string filePath) { PsdNode ret = new PsdNode(); StreamReader fs = new StreamReader(filePath); string line; List <PsdNode> parents = new List <PsdNode>(); PsdNode ele = new PsdNode(); while ((line = fs.ReadLine()) != null) { line = line.Trim(); try { if (line == "{") { parents.Add(ele); } else if (line == "}") { parents.RemoveAt(parents.Count - 1); } else { ele = new PsdNode(); string[] parts = line.Split('|'); ele.name = parts[0]; if (parts.Length > 1) { ele.fileName = parts[1]; string[] offset = parts[2].Split(','); string[] size = parts[3].Split(','); ele.left = float.Parse(offset[0]); ele.top = float.Parse(offset[1]); ele.width = float.Parse(size[0]); ele.height = float.Parse(size[1]); } if (parents.Count > 0) { PsdNode parent = parents[parents.Count - 1]; parent.children.Push(ele); } else { ret.children.Push(ele); } } } catch { EditorUtility.DisplayDialog( "Error", "Failed loading structure at \n" + filePath + "\n" + "Make sure this is the right file generated by " + NAME + ".", "OK" ); return(new PsdNode()); } } fs.Close(); return(ret); }