1. 程式人生 > >unity批量設定圖片為etc2格式或者astc格式

unity批量設定圖片為etc2格式或者astc格式

網上找了半天,沒一個能用的,乾脆自己寫個,直接拷貝這個指令碼就行

這個是ios版本的,安卓的話寫在註釋裡面,去掉註釋就能用了

現在ios支援一種新格式叫astc比原本的pvrtc壓縮比更高,而且質量更高,但是iphone5及更老的機子不支援,所以不打算支援iphone5的話,可以用新格式,不然還是用pvrtc

我試了下,感覺6*6的astc的價效比最高

下面放指令碼

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;

public class TextureAutoSet : EditorWindow { [MenuItem("Assets/*****設定資料夾以及子資料夾下面的圖片壓縮格式為ASTC", priority = 0)] static void AutoSetASTC() { string[] guidArray = Selection.assetGUIDs; foreach (var item in guidArray) { string selectFloder = AssetDatabase.GUIDToAssetPath(item); DirectoryInfo root
= new DirectoryInfo(selectFloder); GetFloder(root); } } static void GetFloder(DirectoryInfo root) { GetFile(root); //查詢子資料夾 DirectoryInfo[] array = root.GetDirectories(); //Debug.Log(root); foreach (DirectoryInfo item in
array) { GetFloder(item); } } static void GetFile(DirectoryInfo root) { //DirectoryInfo root = new DirectoryInfo(path); FileInfo[] fileDic = root.GetFiles(); foreach (var file in fileDic) { //sDebug.Log(file); if (file.FullName.EndsWith(".png") || file.FullName.EndsWith(".jpg") || file.FullName.EndsWith(".tga") || file.FullName.EndsWith(".psd") || file.FullName.EndsWith(".PSD") || file.FullName.EndsWith(".exr") || file.FullName.EndsWith(".tif")) { //Debug.Log("-------------" + file.FullName); //Debug.Log(Application.dataPath); SetPicFormat(file.FullName.Replace(Application.dataPath.Replace("Assets",""),"")); } } } static void SetPicFormat(string path) { Debug.Log(path); TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter; if (importer.mipmapEnabled == true) { importer.mipmapEnabled = false; } //判斷圖片大小 Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(path); int textureSize = Mathf.Max(texture.height, texture.width); //Debug.Log(textureSize); int SizeType = FitSize(textureSize); //Android iPhone if(importer.DoesSourceTextureHaveAlpha()) { //ios版本 importer.SetPlatformTextureSettings("iPhone", SizeType, TextureImporterFormat.ASTC_RGBA_6x6); //安卓版本 //importer.SetPlatformTextureSettings("Android", SizeType, TextureImporterFormat.ETC2_RGBA8); } else { //ios版本 importer.SetPlatformTextureSettings("iPhone", SizeType, TextureImporterFormat.ASTC_RGB_6x6); //安卓版本 //importer.SetPlatformTextureSettings("Android", SizeType, TextureImporterFormat.ETC2_RGB4); } } static int[] formatSize = new int[]{32,64,128,256,512,1024,2048,4096}; static int FitSize(int picValue) { foreach (var one in formatSize) { if (picValue <= one) { return one; } } return 1024; } }