Пример #1
0
        private ImportLayerData GetLayerData(int[] layerIdx)
        {
            if (importSettings == null || layerIdx == null)
            {
                return(null);
            }

            return(importSettings.GetLayerData(layerIdx));
        }
Пример #2
0
        private static IEnumerator ImportCoroutine(Object psdFile, ImportUserData importSettings,
                                                   List <int[]> layerIndices, bool doYield     = false,
                                                   Action <int, ImportLayerData> layerCallback = null,
                                                   Action <List <Sprite> > completeCallback    = null)
        {
            string filepath = GetPsdFilepath(psdFile);

            if (string.IsNullOrEmpty(filepath))
            {
                if (completeCallback != null)
                {
                    completeCallback(null);
                }
                yield break;
            }

            // No target directory set, use PSD file directory
            if (string.IsNullOrEmpty(importSettings.TargetDirectory))
            {
                importSettings.TargetDirectory = filepath.Substring(0, filepath.LastIndexOf("/"));
            }

            // Get the texture importer for the PSD
            TextureImporter         psdUnitySettings = (TextureImporter)AssetImporter.GetAtPath(filepath);
            TextureImporterSettings psdUnityImport   = new TextureImporterSettings();

            psdUnitySettings.ReadTextureSettings(psdUnityImport);

            int importCurrent = 0;

            List <Sprite> sprites = new List <Sprite>();

            using (PsdDocument psd = PsdDocument.Create(filepath))
            {
                foreach (int[] layerIdx in layerIndices)
                {
                    ImportLayerData layerSettings = importSettings.GetLayerData(layerIdx);
                    if (layerSettings == null)
                    {
                        continue;
                    }

                    if (layerCallback != null)
                    {
                        layerCallback(importCurrent, layerSettings);
                    }

                    var sprite = ImportLayer(psd, importSettings, layerSettings, psdUnityImport);

                    if (importSettings.GenerateSpriteMesh)
                    {
                        GenerateSpriteMesh(sprite);
                    }

                    sprites.Add(sprite);
                    importCurrent++;

                    if (doYield)
                    {
                        yield return(null);
                    }
                }
            }
            if (completeCallback != null)
            {
                completeCallback(sprites);
            }
        }
Пример #3
0
        private static IEnumerator ImportCoroutine(Object psdFile, string targetDirectory, ImportUserData importSettings,
                                                   List <int[]> layerIndices,
                                                   Action <int, ImportLayerData> layerCallback = null,
                                                   Action <List <Sprite> > completeCallback    = null)
        {
            string filepath = GetPsdFilepath(psdFile);

            if (string.IsNullOrEmpty(filepath))
            {
                completeCallback?.Invoke(null);
                yield break;
            }

            if (string.IsNullOrEmpty(targetDirectory))
            {
                targetDirectory = filepath.Substring(0, filepath.LastIndexOf("/"));
            }

            // Get the texture importer for the PSD
            TextureImporter         psdUnitySettings = (TextureImporter)AssetImporter.GetAtPath(filepath);
            TextureImporterSettings psdUnityImport   = new TextureImporterSettings();

            psdUnitySettings.ReadTextureSettings(psdUnityImport);

            int importCurrent = 0;

            var sprites = new List <Sprite>();

            using (PsdDocument psd = PsdDocument.Create(filepath)) {
                var layersSettings = new List <ImportLayerData>();
                foreach (int[] layerIdx in layerIndices)
                {
                    ImportLayerData layerSettings = importSettings.GetLayerData(layerIdx);
                    if (layerSettings == null)
                    {
                        continue;
                    }

                    layerCallback?.Invoke(importCurrent, layerSettings);
                    layersSettings.Add(layerSettings);
                }
                const float totalSteps  = 4.0f;
                float       currentStep = 0.0f;
                EditorCoroutineRunner.UpdateUI($"Getting psd layers", ++currentStep / totalSteps);
                yield return(null);

                var psdLayers = GetPsdLayers(layersSettings, psd);
                EditorCoroutineRunner.UpdateUI($"CreateTextures2D", ++currentStep / totalSteps);
                yield return(null);

                var textures = CreateTextures2D(psdLayers, psd, importSettings, psdUnityImport);
                EditorCoroutineRunner.UpdateUI($"GetTextureWithPathData", ++currentStep / totalSteps);
                yield return(null);

                var texturesData = GetTextureWithPathData(textures, psdLayers.Select(x => x.psdLayer).ToArray(), importSettings.fileNaming, importSettings.groupMode, targetDirectory);
                EditorCoroutineRunner.UpdateUI($"CreateSpriteAssets", ++currentStep / totalSteps);
                yield return(null);

                sprites.AddRange(CreateSpriteAssets(texturesData, layersSettings, psdUnityImport, importSettings.PackingTag));
            }
            completeCallback?.Invoke(sprites);
        }