rabidus-test/Assets/PolyFew/ThirdParty/AsImpL/Scripts/EditorUtil.cs

101 lines
4.1 KiB
C#

#if UNITY_EDITOR
using System;
using System.IO;
using UnityEngine;
using UnityEditor;
namespace BrainFailProductions.PolyFew.AsImpL
{
public class EditorUtil
{
/// <summary>
/// Create a folder, if not yet created, in the asset database
/// </summary>
/// <param name="path">path that will contain the new folder</param>
/// <param name="folder">name of the folder</param>
public static void CreateAssetFolder(string path, string folder)
{
if (!AssetDatabase.IsValidFolder(path + "/" + folder))
{
AssetDatabase.CreateFolder(path, folder);
}
}
/// <summary>
/// Capture a screenshot, naming its file automatically with date and time,
/// then shows the file in the file manager (e.g. Explorer)
/// </summary>
/// <param name="prefix">prefix at the beginning of the file name</param>
public static void AutoCaptureScreenshot(string prefix)
{
string fileName = prefix + "-" + DateTime.Now.ToString("s").Replace('T', '_').Replace(':', '-') + ".png";
#if UNITY_2017_1_OR_NEWER
ScreenCapture.CaptureScreenshot(fileName);
#else
Application.CaptureScreenshot(fileName);
#endif
Debug.Log("Screenshot saved to " + Application.dataPath + "/" + fileName);
EditorUtility.RevealInFinder(Application.dataPath);
}
/// <summary>
/// Set a texture in the asset database as readable to perform image analisys
/// </summary>
/// <param name="texAssetPath"></param>
public static void SetTextureReadable(string texAssetPath)
{
TextureImporter textureImporter = AssetImporter.GetAtPath(texAssetPath) as TextureImporter;
if (textureImporter)
{
Debug.LogFormat("Changing import settings for texture {0}...", texAssetPath);
textureImporter.isReadable = true;
textureImporter.alphaIsTransparency = true;
textureImporter.SaveAndReimport();
}
else
{
Debug.LogError("Texture importer for not found for " + texAssetPath);
}
}
/// <summary>
/// Save a new texture to the asset databse and reimport it
/// </summary>
/// <param name="texture">new texture</param>
/// <param name="texAssetPath">path in the asset database</param>
/// <param name="postFix">postfix appended to the file name</param>
/// <param name="isNormalMap">if true the texture importer is set to normal map</param>
public static void SaveAndReimportPngTexture(ref Texture2D texture, string texAssetPath, string postFix, bool isNormalMap = false)
{
string newTexAssetPath = Path.GetDirectoryName(texAssetPath) + "/" + Path.GetFileNameWithoutExtension(texAssetPath) + postFix + ".png";
if (newTexAssetPath != texAssetPath)
{
Debug.LogFormat("Storing texture {0}...", newTexAssetPath);
// Encode texture into PNG
byte[] bytes = texture.EncodeToPNG();
File.WriteAllBytes(Application.dataPath + "/../" + newTexAssetPath, bytes);
//texture.LoadImage(bytes, false);
//AssetDatabase.CreateAsset(texture, newTexAssetPath);
//AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
//EditorUtil.SetTextureReadable(texture, newTexAssetPath);
texAssetPath = newTexAssetPath;
if (isNormalMap)
{
TextureImporter newTextureImporter = AssetImporter.GetAtPath(texAssetPath) as TextureImporter;
newTextureImporter.textureType = TextureImporterType.NormalMap;
newTextureImporter.SaveAndReimport();
}
//newTextureImporter.isReadable = true;
//AssetDatabase.CreateAsset(newTextureImporter, newTexAssetPath);
texture = AssetDatabase.LoadAssetAtPath<Texture2D>(texAssetPath);
}
}
}
}
#endif