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