zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    2015306 白皎 《网络攻防》Exp5 MSF基础应用
    2015306 白皎 《网络攻防》Exp4 恶意代码分析
    2015306 白皎 《网络攻防》Exp3 免杀原理与实践
    2015306 白皎 《网络攻防》Exp1 进阶
    20155306 白皎 《网络攻防》 Exp2 后门原理与实践
    20155306 白皎 《网络攻防》Exp1 PC平台逆向破解——逆向与Bof基础
    2017-2018-1 20155306 《信息安全系统设计基础》嵌入式C语言———提取设置时分秒
    2017-2018-1 20155306 《信息安全系统设计基础》课程总结
    2017-2018-1 20155306 《信息安全系统设计基础》第十四周学习总结
    2017-2018-1 20155306 《信息安全系统设计基础》第13周学习总结
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/10677481.html
Copyright © 2011-2022 走看看