The OnPostprocessTexture method will do postprocessing to only assets which were preprocessed by "Do".
using System.Collections.Generic; using UnityEditor; using UnityEngine; public class ToGrayTexture : AssetPostprocessor { private static List<string> guids_ = new List<string>(8); [MenuItem("Assets/Texture/ToGray")] private static void Do() { guids_.Clear(); Object[] objects = Selection.objects; if(objects.Length <= 0) { return; } foreach(Object obj in objects) { string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(obj)); guids_.Add(guid); } EditorApplication.ExecuteMenuItem("Assets/Reimport"); } void OnPostprocessTexture(Texture2D texture) { string guid = AssetDatabase.AssetPathToGUID(assetPath); if(!guids_.Exists(s => guid == s)) { return; } for(int i=0; i<texture.mipmapCount; ++i) { Color32[] colors = texture.GetPixels32(i); for(int j=0; j<colors.Length; ++j) { int c = (int)(0.299f * colors[j].r + 0.587f * colors[j].g + 0.114f * colors[j].b); colors[j].r = colors[j].g = colors[j].b = (byte)Mathf.Clamp(c, 0, 255); } texture.SetPixels32(colors, i); } texture.Apply(); guids_.Remove(guid); } }
0 件のコメント:
コメントを投稿