Unity 模型壓縮

模型壓縮

using UnityEngine;
using UnityEditor;
using System.IO;

using System.Collections.Generic;

//using Babybus.Framework.Serialization;
using System.Text;

public class MoodelCheck
{

    [MenuItem("檢查模型/一鍵壓縮模型的mesh")]
    static void 一鍵壓縮所有模型的mesh()
    {

        AssetDatabase.StartAssetEditing();
        var assets = new List<string>();
        int count = 0;
        foreach (var guid in AssetDatabase.FindAssets("t:Model"))
        {
            var assetPath = AssetDatabase.GUIDToAssetPath(guid);
            var textureImporter = AssetImporter.GetAtPath(assetPath) as ModelImporter;
            if (textureImporter == null)
                continue;

            //int maxsize = 0;
            //TextureImporterFormat textureImporterFormat;
            //string androidPlatform = "Android";
            if (textureImporter.meshCompression != ModelImporterMeshCompression.Off)
            {
                textureImporter.meshCompression = ModelImporterMeshCompression.Off;
                textureImporter.SaveAndReimport();
                //Debug.Log(assetPath);
                count++;
            }
        }
        Debug.Log("壓縮了:" + count + "個模型");
        AssetDatabase.StopAssetEditing();
        AssetDatabase.Refresh();
    }
    [MenuItem("檢查模型/選擇文件夾壓縮模型mesh")]
    static void 選擇文件夾壓縮模型mesh()
    {
        if(Selection.objects.Length!=1)
        {
            Debug.LogError("選擇一個文件夾");
            return;
        }
        string path = AssetDatabase.GetAssetPath(Selection.objects[0]);
        if(!Directory.Exists(path))
        {
            Debug.Log(path);
            return;
        }

        AssetDatabase.StartAssetEditing();
        var assets = new List<string>();
        int count = 0;
        string []filePath = GetFilePath(Selection.objects);
        foreach (var guid in AssetDatabase.FindAssets("t:Model", filePath))
        {

            var assetPath = AssetDatabase.GUIDToAssetPath(guid);
            var textureImporter = AssetImporter.GetAtPath(assetPath) as ModelImporter;
            if (textureImporter == null)
                continue;

            //int maxsize = 0;
            //TextureImporterFormat textureImporterFormat;
            //string androidPlatform = "Android";

            if (textureImporter.meshCompression != ModelImporterMeshCompression.Off)
            {
                textureImporter.meshCompression = ModelImporterMeshCompression.Off;
                textureImporter.SaveAndReimport();
                count++;
            }
        }
        Debug.Log("壓縮了:" + count + "個模型");
        AssetDatabase.StopAssetEditing();
        AssetDatabase.Refresh();
    }
    [MenuItem("檢查模型/去除文件夾內模型的readWrite")]
    static void 去除文件夾內模型的()
    {
        if (Selection.objects.Length != 1)
        {
            Debug.LogError("選擇一個文件夾");
            return;
        }
        string path = AssetDatabase.GetAssetPath(Selection.objects[0]);
        if (!Directory.Exists(path))
        {
            Debug.Log(path);
            return;
        }

        AssetDatabase.StartAssetEditing();
        var assets = new List<string>();
        int count = 0;
        string[] filePath = GetFilePath(Selection.objects);
        foreach (var guid in AssetDatabase.FindAssets("t:Model", filePath))
        {
            var assetPath = AssetDatabase.GUIDToAssetPath(guid);
            var textureImporter = AssetImporter.GetAtPath(assetPath) as ModelImporter;
            if (textureImporter == null)
                continue;

            //int maxsize = 0;
            //TextureImporterFormat textureImporterFormat;
            //string androidPlatform = "Android";
            if (textureImporter.isReadable)
            {
                textureImporter.isReadable = false;
                textureImporter.SaveAndReimport();
                count++;
            }
        }
        Debug.Log("壓縮了:" + count + "個模型");
        AssetDatabase.StopAssetEditing();
        AssetDatabase.Refresh();
    }
    public static string[] GetFilePath(Object[] targets)
    {
        var folders = new List<string>();
        for (int i = 0; i < targets.Length; i++)
        {
            string assetPath = AssetDatabase.GetAssetPath(targets[i]);
            if (Directory.Exists(assetPath))
                folders.Add(assetPath);
        }
        return folders.ToArray();
    }
    [MenuItem("檢查模型/一鍵壓縮模型的動畫爲Optimal")]
    static void 一鍵壓縮模型的動畫()
    {

        AssetDatabase.StartAssetEditing();
        var assets = new List<string>();
        int count = 0;
        foreach (var guid in AssetDatabase.FindAssets("t:Model"))
        {
            var assetPath = AssetDatabase.GUIDToAssetPath(guid);
            var textureImporter = AssetImporter.GetAtPath(assetPath) as ModelImporter;
            if (textureImporter == null)
                continue;

            //int maxsize = 0;
            //TextureImporterFormat textureImporterFormat;
            //string androidPlatform = "Android";
            if (textureImporter.animationCompression != ModelImporterAnimationCompression.Optimal)
            {
                textureImporter.animationCompression = ModelImporterAnimationCompression.Optimal;
                textureImporter.SaveAndReimport();
                count++;
            }
        }
        Debug.Log("壓縮了:" + count + "個動畫");
        AssetDatabase.StopAssetEditing();
        AssetDatabase.Refresh();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章