0


Unity材质球自动遍历所需贴图

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.点右上角三个点,进行调用脚本中的方法。


标签: unity 材质 贴图

本文转载自: https://blog.csdn.net/weixin_45375968/article/details/140681791
版权归原作者 _济南橙子 所有, 如有侵权,请联系我们删除。

“Unity材质球自动遍历所需贴图”的评论:

还没有评论