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