Unity如何批量修改材质的属性

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();
    }
}

猜你喜欢

转载自blog.csdn.net/grace_yi/article/details/122731729
今日推荐