うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【Unity】テクスチャの色を反転するツール

仮画像を作成したいときなど、仮画像と分かるようになにかしら対応をしたい

そんなときに利用できるツールを作成しました

使い方

変換したいテクスチャを Project Window で右クリックして
Texture/Nage を選択すると変換できます

f:id:hacchi_man:20201026002002p:plain:w200

変更例

f:id:hacchi_man:20201026002102p:plain:w300f:id:hacchi_man:20201026002120p:plain:w300

コード

using UnityEditor;
using UnityEngine;
public class TextureNegaConvertTool
{
[MenuItem("Assets/Texture/Nega")]
private static void TextureConvertNega()
{
var guids = Selection.assetGUIDs;
if (guids.Length <= 0)
return;
foreach (var guid in guids)
{
var path = AssetDatabase.GUIDToAssetPath(guid);
var texture = AssetDatabase.LoadAssetAtPath<Texture2D>(path);
if (texture != null)
ToNega(texture);
}
}
private static void ToNega(Texture2D src)
{
var texture = new Texture2D(src.width, src.height, src.format, src.mipmapCount == -1);
var path = AssetDatabase.GetAssetPath(src);
var importer = AssetImporter.GetAtPath(path) as TextureImporter;
var isChange = !importer.isReadable;
if (isChange)
{
importer.isReadable = true;
importer.SaveAndReimport();
AssetDatabase.Refresh();
}
for (var x = 0; x < src.width; x++)
{
for (var y = 0; y < src.height; y++)
{
var color = src.GetPixel(x, y);
for (var i = 0; i < 3; i++)
color[i] = 1 - color[i];
texture.SetPixel(x, y, color);
}
}
texture.Apply();
System.IO.File.WriteAllBytes(path.Replace('/', System.IO.Path.DirectorySeparatorChar), texture.EncodeToPNG());
AssetDatabase.Refresh();
if (isChange)
{
var importer2 = AssetImporter.GetAtPath(path) as TextureImporter;
importer2.isReadable = false;
importer2.SaveAndReimport();
}
}
}