Unity修改模型的ScaleFactor(偷個懶,在打包AssetBundle的基礎上修改)

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

public class ScaleFactorModify : MonoBehaviour {

    [MenuItem("EditorTool/ChangeModelScale")]//清空AssetBunldeName
    private static void ChangeModelScale()
    {
        var dirObjs = GetDirObjs();
        if (dirObjs.Count == 0) return;//選中的沒有文件夾
        foreach (Object dirObj in dirObjs)
        {
            var dir = GetDirInfo(dirObj);
            FindModelInDir(dir);
        }
        AssetDatabase.Refresh();
    }
    /// <summary>
    /// 獲取選中文件夾
    /// </summary>
    /// <returns></returns>
    private static List<Object> GetDirObjs()
    {
        Object[] selectedAssets = Selection.GetFiltered(typeof(Object), SelectionMode.Assets);
        List<Object> dirObjs = new List<Object>();
        foreach (Object obj in selectedAssets)
        {
            string sourcePath = AssetDatabase.GetAssetPath(obj);
            if (Directory.Exists(sourcePath)) //判斷是否是文件夾
            {
                dirObjs.Add(obj);
            }
        }
        return dirObjs;
    }
    /// <summary>
    /// 設置文件夾Asset名稱
    /// </summary>
    /// <param name="dir"></param>
    private static void FindModelInDir(DirectoryInfo dir)
    {
        //Debug.Log(string.Format("SetDirAssetName:{0}",dir.FullName));
        DirectoryInfo[] subDirs = dir.GetDirectories();
        if (subDirs.Length == 1 && subDirs[0].Name == "Materials")
        {
            ChangeModelScale(dir);
        }
        else
        {
            foreach (DirectoryInfo subDir in subDirs)
            {
                FindModelInDir(subDir);
            }
        }
    }
    /// <summary>
    /// 獲取文件夾信息
    /// </summary>
    /// <param name="dirObj"></param>
    /// <returns></returns>
    private static DirectoryInfo GetDirInfo(Object dirObj)
    {
        string sourcePath = AssetDatabase.GetAssetPath(dirObj);
        DirectoryInfo dir = new DirectoryInfo(sourcePath); //獲取文件夾
        return dir;
    }

    private static void ChangeModelScale(DirectoryInfo dir)
    {
        FileInfo[] files = dir.GetFiles("*.*", SearchOption.AllDirectories); //搜索文件夾下面的所有文件

        List<Object> subObjects = new List<Object>();
        Regex regex = new Regex(".(3DS|3ds)$"); //正則表達式,過濾後綴爲.meta.cs.xml的文件
        foreach (FileInfo file in files)
        {
            string filePath = file.FullName;
            int index = filePath.IndexOf(Application.dataPath);
            string relativePath = filePath.Substring(Application.dataPath.Length + 1);
            relativePath = "Assets\\" + relativePath;
            if (regex.IsMatch(relativePath))
            {
                Object subObj = AssetDatabase.LoadAssetAtPath<Object>(relativePath);
                string sPath = AssetDatabase.GetAssetPath(subObj);
                ModelImporter importer =(ModelImporter)ModelImporter.GetAtPath(sPath);
                if(importer!=null)
                {
                    if (importer.globalScale == 0.1f) importer.globalScale = 0.7f;
                    else if (importer.globalScale == 0.3f) importer.globalScale = 3.3f;

                    AssetDatabase.ImportAsset(sPath);  //這句不加,面板上數字會變,但是實際大小不會變
                }
            }
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章