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);  //这句不加,面板上数字会变,但是实际大小不会变
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Witness_K/article/details/85112604