Unity材质球自动遍历所需贴图
一、原理
例如一个材质球名为:Decal_Text_Cranes_01_Mat ,
然后从全局遍历出:Decal_Text_Cranes_01_Albedo赋值给材质球的BaseMap,
全局遍历出Decal_Text_Cranes_01_MAODS 赋值给材质球MetallicMap通道,
全局遍历出Decal_Text_Cranes_01_Normal 给材质球NormalMap通道,
**规律:**材质球名字:Decal_Text_Cranes_01_Mat 把后面Mat换成通道名称,就是该材质球的通道贴图
二、用法
1.代码:
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
public class AutoAssignTextureMaps : MonoBehaviour
{
public List<Material> targetMaterials; // 在Inspector中指定目标材质列表
private Dictionary<string, string> textureMapNames = new Dictionary<string, string>
{
{ "Albedo", "_BaseMap" }, // Base Color
{ "MAODS", "_MetallicGlossMap" }, // Metallic and Smoothness
{ "Normal", "_BumpMap" } // Normal Map
};
[ContextMenu("_AlphaMat后缀自动补全")]
void AssignTextures1( )
{
foreach (Material material in targetMaterials)
{
string baseName = material.name.Replace("_AlphaMat", "");
foreach (var pair in textureMapNames)
{
string textureName = baseName + "_" + pair.Key;
Texture2D texture = FindTexture(textureName);
if (texture != null)
{
material.SetTexture(pair.Value, texture);
Debug.Log($"Assigned {textureName} to {pair.Value} for material {material.name}");
}
else
{
Debug.LogError($"Could not find texture {textureName} for material {material.name}");
}
}
}
}
[ContextMenu("_Mat后缀自动补全")]
void AssignTextures2( )
{
foreach (Material material in targetMaterials)
{
string baseName = material.name.Replace("_Mat", "");
foreach (var pair in textureMapNames)
{
string textureName = baseName + "_" + pair.Key;
Texture2D texture = FindTexture(textureName);
if (texture != null)
{
material.SetTexture(pair.Value, texture);
Debug.Log($"Assigned {textureName} to {pair.Value} for material {material.name}");
}
else
{
Debug.LogError($"Could not find texture {textureName} for material {material.name}");
}
}
}
}
Texture2D FindTexture(string textureName)
{
string[] guids = AssetDatabase.FindAssets(textureName);
if (guids.Length > 0)
{
string assetPath = AssetDatabase.GUIDToAssetPath(guids[0]);
return AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);
}
return null;
}
}
2.使用方法
1.将脚本挂载到一个空物体:
2.把所需的材质球添加到集合列表中。
3.点右上角三个点,进行调用脚本中的方法。