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.代码:
usingUnityEngine;usingSystem.Collections.Generic;usingSystem.IO;usingUnityEditor;publicclassAutoAssignTextureMaps:MonoBehaviour{publicList<Material> targetMaterials;// 在Inspector中指定目标材质列表privateDictionary<string,string> textureMapNames =newDictionary<string,string>{{"Albedo","_BaseMap"},// Base Color{"MAODS","_MetallicGlossMap"},// Metallic and Smoothness{"Normal","_BumpMap"}// Normal Map};[ContextMenu("_AlphaMat后缀自动补全")]voidAssignTextures1(){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后缀自动补全")]voidAssignTextures2(){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}");}}}}Texture2DFindTexture(string textureName){string[] guids = AssetDatabase.FindAssets(textureName);if(guids.Length >0){string assetPath = AssetDatabase.GUIDToAssetPath(guids[0]);return AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);}returnnull;}}
2.使用方法
1.将脚本挂载到一个空物体:
2.把所需的材质球添加到集合列表中。
3.点右上角三个点,进行调用脚本中的方法。
版权归原作者 _济南橙子 所有, 如有侵权,请联系我们删除。