Example #1
0
        public static void Configure(TextureDescriptor texDesc, IReadOnlyDictionary <SubAssetKey, Texture> externalMap)
        {
            if (!externalMap.TryGetValue(texDesc.SubAssetKey, out var externalTexture))
            {
                return;
            }
            if (!EditorTextureUtility.TryGetAsEditorTexture2DAsset(externalTexture, out var texture2D, out var importer))
            {
                return;
            }

            Configure(texDesc, importer);
            importer.SaveAndReimport();
        }
Example #2
0
        private static void ConfigureSize(TextureImporter textureImporter)
        {
            if (!EditorTextureUtility.TryGetOriginalTexturePixelSize(textureImporter, out var originalSize))
            {
                return;
            }

            var originalMaxSize = Mathf.Max(originalSize.x, originalSize.y);

            textureImporter.maxTextureSize = originalMaxSize > 4096 ? 8192 :
                                             originalMaxSize > 2048 ? 4096 :
                                             originalMaxSize > 1024 ? 2048 :
                                             originalMaxSize > 512 ? 1024 :
                                             512;
        }
        /// <summary>
        /// Texture をオリジナルのテクスチャアセット(png/jpg)ファイルのバイト列そのまま出力してよいかどうか判断する。
        /// 具体的な条件は以下
        ///
        /// * TextureAsset が存在する
        /// * TextureImporter の maxSize が画像の縦横サイズ以上
        /// * TextureImporter の色空間設定が exportColorSpace と一致する
        /// * 各 Texture Type ごとの判定
        ///
        /// Unity の Texture2D のデータは、その参照元であるテクスチャアセットファイルのデータと一致することはむしろ稀。
        /// </summary>
        public bool CanExportAsEditorAssetFile(Texture texture, ColorSpace exportColorSpace)
        {
            // Exists as UnityEditor Texture2D Assets ?
            if (!EditorTextureUtility.TryGetAsEditorTexture2DAsset(texture, out var texture2D, out var textureImporter))
            {
                return(false);
            }

            // Maintain original width/height ?
            if (!IsTextureSizeMaintained(textureImporter))
            {
                return(false);
            }

            // Equals color space ?
            if (!IsFileColorSpaceSameWithExportColorSpace(textureImporter, exportColorSpace))
            {
                return(false);
            }

            // Each Texture Importer Type Validation
            switch (textureImporter.textureType)
            {
            case TextureImporterType.Default:
                break;

            case TextureImporterType.NormalMap:
                // A texture has "Normal map" TextureType is ALWAYS converted into normalized normal pixel by Unity.
                // So we must copy it.
                return(false);

            default:
                // Not Supported TextureImporterType
                throw new ArgumentOutOfRangeException();
            }

            return(true);
        }