public static void Reconstruct(Object psdFile, ImportUserData importSettings, ImportLayerData reconstructRoot, Vector2 documentPivot, IReconstructor reconstructor) { string psdPath = GetPsdFilepath(psdFile); if (string.IsNullOrEmpty(psdPath)) { return; } using (var psdDoc = PsdDocument.Create(psdPath)) { ReconstructData data = GetReconstructData(psdDoc, psdPath, documentPivot, importSettings, reconstructRoot); var GO = reconstructor.Reconstruct(reconstructRoot, data, Selection.activeGameObject); if (GO != null) { EditorGUIUtility.PingObject(GO); Selection.activeGameObject = GO; } } }
private static ReconstructData GetReconstructData(PsdDocument psdDoc, string psdPath, Vector2 documentPivot, ImportUserData importSettings, ImportLayerData reconstructRoot) { // Get the texture import setting of the PSD TextureImporter psdUnitySettings = (TextureImporter)AssetImporter.GetAtPath(psdPath); TextureImporterSettings psdUnityImport = new TextureImporterSettings(); psdUnitySettings.ReadTextureSettings(psdUnityImport); Vector2 docSize = new Vector2(psdDoc.Width, psdDoc.Height); ReconstructData data = new ReconstructData(docSize, documentPivot, psdUnitySettings.spritePixelsPerUnit); reconstructRoot.Iterate( layerCallback: layer => { if (layer.import == false) { return; } var psdLayer = GetPsdLayerByIndex(psdDoc, layer.indexId); Rect layerBounds = new Rect() { xMin = psdLayer.Left, xMax = psdLayer.Right, yMin = psdDoc.Height - psdLayer.Bottom, yMax = psdDoc.Height - psdLayer.Top }; data.layerBoundsIndex.Add(layer.indexId, layerBounds); string layerDir; string layerPath = GetFilePath(psdLayer, importSettings, "png", out layerDir); string layerMeshDir; string layerMeshPath = GetFilePath(psdLayer, importSettings, "asset", out layerMeshDir); Sprite layerSprite = AssetDatabase.LoadAssetAtPath <Sprite>(layerPath); SpriteMesh layerSpriteMesh = AssetDatabase.LoadAssetAtPath <SpriteMesh>(layerMeshPath); if (layerSprite == null) { layerSprite = ImportLayer(psdDoc, importSettings, layer, psdUnityImport); } if (layerSpriteMesh == null && importSettings.GenerateSpriteMesh) { layerSpriteMesh = GenerateSpriteMesh(layerSprite); } Vector2 spriteAnchor = Vector2.zero; if (layerSprite != null) { TextureImporter layerImporter = (TextureImporter)AssetImporter.GetAtPath(layerPath); TextureImporterSettings layerSettings = new TextureImporterSettings(); layerImporter.ReadTextureSettings(layerSettings); if (layerSettings.spriteAlignment == (int)SpriteAlignment.Custom) { spriteAnchor = layerSettings.spritePivot; } else { spriteAnchor = AlignmentToPivot((SpriteAlignment)layerSettings.spriteAlignment); } } data.AddSprite(layer.indexId, layerSprite, spriteAnchor); if (importSettings.GenerateSpriteMesh) { data.AddSpriteMesh(layer.indexId, layerSpriteMesh); } }, canEnterGroup: checkGroup => checkGroup.import ); return(data); }