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); //這句不加,面板上數字會變,但是實際大小不會變
}
}
}
}
}