• Unity --- 在原目录中,将选中的Texture剥离为rgb和alpha


      1 using System.Collections;
      2 using System.Collections.Generic;
      3 using UnityEngine;
      4 using UnityEditor;
      5 using System;
      6 using UObject = UnityEngine.Object;
      7 using System.IO;
      8 
      9 public class lgs
     10 {
     11     [MenuItem("Assets/AlphaSpliter ")]
     12     static void AlphaSpliter()
     13     {
     14         UObject[] objs = Selection.objects;
     15         for (int i = 0; i < objs.Length; i++)
     16         {
     17             Texture tex = objs[i] as Texture;
     18             CreateRGBTexture(tex);
     19             CreateAlphaTexture(tex as Texture2D);
     20         }
     21     }
     22 
     23     static void CreateAlphaTexture(Texture2D src)
     24     {
     25         if (null == src)
     26             throw new ArgumentNullException("src");
     27 
     28         //create alpha texture
     29         var srcPixels = src.GetPixels();
     30         var targetPixels = new Color[srcPixels.Length];
     31         for (int i = 0, iMax = srcPixels.Length; i < iMax; ++i)
     32         {
     33             float r = srcPixels[i].a;
     34             targetPixels[i] = new Color(r, r, r);
     35         }
     36 
     37         Texture2D alphaTex = new Texture2D(src.width, src.height, TextureFormat.ARGB32, false);
     38         alphaTex.SetPixels(targetPixels);
     39         alphaTex.Apply();
     40 
     41         //save alpha texture
     42         string srcPath = AssetDatabase.GetAssetPath(src);
     43         string ext = Path.GetExtension(srcPath);
     44         string newPath = string.Format("{0}{1}{2}", srcPath.Substring(0, srcPath.Length - ext.Length), "_alpha", ext);
     45         string fullPath = GetFullPath(newPath);
     46         var bytes = alphaTex.EncodeToPNG();
     47         File.WriteAllBytes(fullPath, bytes);
     48 
     49         AssetDatabase.SaveAssets();
     50         AssetDatabase.Refresh();
     51 
     52         int size = Mathf.Max(src.width, src.height, 32);
     53         Setting(newPath, size, TextureImporterFormat.ETC_RGB4, TextureImporterFormat.PVRTC_RGB4);
     54     }
     55 
     56     static void CreateRGBTexture(Texture src)
     57     {
     58         if (null == src)
     59             throw new ArgumentNullException("src");
     60 
     61         string srcPath = AssetDatabase.GetAssetPath(src);
     62         string ext = Path.GetExtension(srcPath);
     63         string newPath = string.Format("{0}{1}{2}", srcPath.Substring(0, srcPath.Length - ext.Length), "_rgb", ext);
     64 
     65 
     66         AssetDatabase.DeleteAsset(newPath);
     67         AssetDatabase.CopyAsset(srcPath, newPath);
     68         AssetDatabase.ImportAsset(newPath);
     69 
     70         int size = Mathf.Max(src.width, src.height, 32);
     71         Setting(newPath, size, TextureImporterFormat.ETC_RGB4, TextureImporterFormat.PVRTC_RGB4);
     72     }
     73 
     74     static void Setting(string assetPath, int maxSize, TextureImporterFormat androidFormat, TextureImporterFormat iosFormat)
     75     {
     76         var texImporter = AssetImporter.GetAtPath(assetPath) as TextureImporter;
     77         {
     78             texImporter.npotScale = TextureImporterNPOTScale.ToNearest;
     79             texImporter.isReadable = false;
     80             texImporter.mipmapEnabled = false;
     81             texImporter.alphaIsTransparency = true;
     82             texImporter.wrapMode = TextureWrapMode.Clamp;
     83             texImporter.filterMode = FilterMode.Bilinear;
     84             texImporter.anisoLevel = 4;    //纹理的各向异性滤波水平
     85             texImporter.SetPlatformTextureSettings("Android", maxSize, androidFormat);
     86             texImporter.SetPlatformTextureSettings("iPhone", maxSize, iosFormat);
     87             texImporter.SetPlatformTextureSettings("Standalone", maxSize, TextureImporterFormat.ARGB32);
     88         }
     89 
     90         AssetDatabase.ImportAsset(assetPath);
     91         AssetDatabase.SaveAssets();
     92     }
     93 
     94     /// <summary>
     95     /// asset path 转 full path
     96     /// </summary>
     97     public static string GetFullPath(string assetPath)
     98     {
     99         if (string.IsNullOrEmpty(assetPath))
    100             return "";
    101 
    102         string p = Application.dataPath + assetPath.Substring(6);
    103         return p.Replace("\", "/");
    104     }
    105 
    106     /// <summary>
    107     /// full path 转 asset path
    108     /// </summary>
    109     public static string GetAssetPath(string fullPath)
    110     {
    111         if (string.IsNullOrEmpty(fullPath))
    112             return "";
    113 
    114         fullPath = fullPath.Replace("\", "/");
    115         return fullPath.StartsWith("Assets/") ?
    116             fullPath :
    117             "Assets" + fullPath.Substring(Application.dataPath.Length);
    118     }
    119 }
  • 相关阅读:
    LeetCode #4 中等题(二分,中位数)
    LeetCode #3 简单题(map标记)
    leetCode #2 简单题(链表)
    LeetCode #1 简单题(map存一下基本就O(nlogn)复杂度)
    CMake使用入门笔记( 1 ) BuildSystem的三个指令 --- 更新中
    (模拟)hihocoder
    (暴力)UVA
    (IDA*)HDU
    总结
    (模拟+贪心)codeforces
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/10677481.html
Copyright © 2020-2023  润新知