Unity导入fbx资源文件的时候,需要修改材质的某个属性,其实修改某个属性为同一个值还是比较简单的,只需要全选所有的材质,然后在Inspector里面进行修改就行了,就会批量修改所有的材质属性。
如果修改很多的材质,每个属性都不一样呢?我这边写了一个脚本来进行操作。具体的步骤为:
1、根据材质目录获取所有的材质路径
2、根据材质路径加载所有的材质,并对每个材质修改属性。
3、保存修改的材质。
下面展示了我在修改烘焙材质的例子,大家可参考。主要我们Emission下面的Color贴图跟Albedo贴图保持一致的例子。
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class ModifyMatrial : MonoBehaviour
{
[SerializeField]
private string MatrialsDir;
public List<string> GetMaterialsPath(string targetFilePath, string searchType)
{
List<string> matrialPaths = new List<string>();
if (Directory.Exists(targetFilePath))
{
string[] guids;
//搜索
guids = AssetDatabase.FindAssets("t:" + searchType, new[] { targetFilePath });
foreach (string guid in guids)
{
string source = AssetDatabase.GUIDToAssetPath(guid);
matrialPaths.Add(source);
}
}
return matrialPaths;
}
public void ModifyMatrials()
{
AssetDatabase.DisallowAutoRefresh();
List<string> matrialPaths = GetMaterialsPath(MatrialsDir, "Material");
foreach(var one in matrialPaths)
{
Material mat = AssetDatabase.LoadAssetAtPath<Material>(one);
if(mat != null)
{
Texture mainTex = mat.GetTexture("_MainTex");
mat.SetTexture("_EmissionMap", mainTex);
}
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
AssetDatabase.AllowAutoRefresh();
}
}