有时候材质做完后需要更改贴图,或者增加贴图,数量少的时候可以一张张添加和修改,数量多的时候就只能代码生成了。原理是通过名字的关联:主贴图和法线贴图大多数只是后缀的不同上,如果不是那是美术规范没做好啊,代码很简单,基本是编辑器类的代码。

这个是还没完善的特定版代码,如直接使用需要更改文件夹名字和贴图后缀。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using System.IO;
using System.Text; [ExecuteInEditMode]
public class Transferandmapnormal : EditorWindow
{
[MenuItem("Window/AutoAddNormal")] //打开一个新的窗口
static void AutoAddNormalinmaterials()
{ Rect wr = new Rect(, , , );
Transferandmapnormal window = (Transferandmapnormal)EditorWindow.GetWindowWithRect(typeof(Transferandmapnormal), wr, true, "AutoAddNormal");
window.Show();
} public List<Material> scensmaterial = new List<Material>();
public List<string> sourceTexturespath = new List<string>(); private string textureSuffix = "_NRM.jpg";
private string docPath = "DWSJ.fbm";
//public Material[] scensmaterial;
//绘制窗口时调用
void OnGUI()
{
EditorGUILayout.LabelField("自动添加法线贴图或其他贴图", GUILayout.Width(), GUILayout.Height());
GUILayout.BeginArea(new Rect(, , , ), "", "Box");
// textureSuffix = EditorGUILayout.TextField("输入贴图后缀:", textureSuffix);
if (GUILayout.Button("获取场景材质", GUILayout.Width()))
{
if (scensmaterial != null)
{ scensmaterial.Clear(); }
if (sourceTexturespath != null)
{ sourceTexturespath.Clear(); }
GetScenesmaterial();
} if (GUILayout.Button("应用法线贴图到材质", GUILayout.Width()))
{
FindandapplyNormalmap(); }
if (GUILayout.Button("关闭窗口", GUILayout.Width()))
{
this.Close();
}
if (GUILayout.Button("除去法线贴图", GUILayout.Width()))
{
testpath();
}
GUILayout.EndArea(); }
private Material tempmaterial;
//获取场景内的材质球
//获取材质球的贴图名称和路径
void GetScenesmaterial()
{ Object[] selection = Selection.GetFiltered(typeof(Material), SelectionMode.Editable | SelectionMode.TopLevel);
if (selection.Length == ) return; foreach (Material test in selection)
{
if (test.mainTexture != null)
{
scensmaterial.Add(test);
sourceTexturespath.Add(docPath + "/" + test.mainTexture.name + textureSuffix);
}
else
{
scensmaterial.Add(null);
sourceTexturespath.Add("");
} }
}
//在相应的文件夹里获取法线贴图
//把法线贴图贴到material对应的位置
public List<Texture> tempTex;
public void FindandapplyNormalmap()
{ for (int i = ; i < scensmaterial.Count; i++)
{ if (!sourceTexturespath[i].Equals(""))
{
//string path = AssetDatabase.GetAssetPath(targetObj);
// Assets / Resources / DWSJ.fbm / DWSJ00B.jpg
TextureImporter texture = (TextureImporter)AssetImporter.GetAtPath("Assets/Resources" + "/" + sourceTexturespath[i]);
Debug.Log("Assets/Resources" + "/" + sourceTexturespath[i]);
if (texture != null)
{
texture.textureType = TextureImporterType.Bump;
AssetDatabase.ImportAsset("Assets/Resources" + "/" + sourceTexturespath[i]);
string correctString=sourceTexturespath[i].Replace(".jpg","");
Debug.Log(correctString);
Texture TempTexture =Resources.Load(correctString) as Texture;
scensmaterial[i].SetTexture("_BumpMap", TempTexture);
}
}
}
AssetDatabase.Refresh(); }
public void testpath()
{
Object[] selection = (Object[])Selection.objects;
//合法性处理
if (selection.Length == ) return;
//批量导入贴图
foreach (Object obj in selection)
{
//取得每一张贴图
Texture texture = (Texture)obj;
//获得贴图路径
string localpath = AssetDatabase.GetAssetPath(texture);
Debug.Log(localpath);
TextureImporter importer = (TextureImporter)AssetImporter.GetAtPath(localpath);
//设置贴图类型
importer.textureType = TextureImporterType.Bump;
//导入项目资源
AssetDatabase.ImportAsset(localpath);
}
AssetDatabase.Refresh(); } }

api解析:

[ExecuteInEditMode]//在编辑器模式下可调用

[MenuItem("Window/AutoAddNormal")]//在window工具栏下增AutoAddNormal选项
window.Show();//展示新的窗口

GUILayout.Button("应用法线贴图到材质",
GUILayout.Width(200))
//添加按钮

Object[] selection = Selection.GetFiltered(typeof(Material),
SelectionMode.Editable | SelectionMode.TopLevel);//把选取的物体过滤掉非Material类型的object到object选项。

TextureImporter –textureimporeter类可以调各种图片输入器的参数,包括图片的类型也是在这里调节。

AssetDatabase.ImportAsset(localpath);//重新载入asset资源
importer.textureType = TextureImporterType.Bump;//将图片的类型改为法线

AssetDatabase.Refresh();//刷新资源

使用方法:

1.在project选取材质

2.点击按键2,批量获取材质和贴图路径

3.获取法线贴图路径并且贴在材质球上

注意事项:(1.法线贴图要放在Resources文件夹上, 2.这个脚本需要修改再使用,因为我还没做通用版本,有些是我自己的文件路径,所以使用需要修改

   private string textureSuffix = "_NRM.jpg";
private string docPath = "DWSJ.fbm";这两句,替换到你自己的贴图后缀和文件名字。

一键批量添加材质的法线贴图-unity插件的更多相关文章

  1. Obj模型功能完善(物体材质,光照,法线贴图).Cg着色语言+OpenTK+F#实现.

    这篇文章给大家讲Obj模型里一些基本功能的完善,包含Cg着色语言,矩阵转换,光照,多重纹理,法线贴图的运用. 在上篇中,我们用GLSL实现了基本的phong光照,这里用Cg着色语言来实现另一钟Blin ...

  2. Unity 着色器训练营(2) - MVP转换和法线贴图

    https://mp.weixin.qq.com/s/Qf4qT15s9bWjbVGh7H32lw 我们刚刚公布了Unity 2018.1中,Unity将会内置可视化编程工具Shader Graph, ...

  3. Unity3D研究院之自制批量关联材质与贴图插件

    原地址:http://www.xuanyusong.com/archives/2314 美术做过的模型导出fbx,美术把Fbx和贴图文件给了程序,程序把Fbx导入工程可能会出现贴图和材质没有关联上的问 ...

  4. 推荐一款Python神器,5 行 Python 代码 实现一键批量扣图

    今天给大家分享一款Python装逼实用神器. 在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去.专业点的人可以使用 PhotoShop 的"魔棒" ...

  5. Unity3D ShaderLab法线贴图

    Unity3D ShaderLab法线贴图 说到法线贴图,应该算是我们最常使用的一种增强视觉效果的贴图.将法线贴图的各个像素点座位模型的法线,这样我们的光照可以模拟出高分辨率的效果, 同时也保持较低的 ...

  6. 【Unity Shaders】Reflecting Your World —— Unity3D中的法线贴图和反射

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  7. 分布式监控系统Zabbix--完整安装记录-批量添加主机和自动发现端口

    一.Zabbix-3.0.3批量添加主机的配置如下: 0)被监控机上要安装zabbix_agent,并配置好zabbix_agentd.conf (如下172.29.8.50是zabbix_serve ...

  8. (转)Unity3D 游戏贴图(法线贴图,漫反射贴图,高光贴图)

    原帖网址http://www.u3dpro.com/read.php?tid=207  感谢jdk900网友的辛苦编写 我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图 ...

  9. 163_技巧_Power BI 一键批量建立自定义字段参数

    163_技巧_Power BI 一键批量建立自定义字段参数 一.背景 在 2022 年 5 月开始,Power BI 新增了一个非常有用的功能字段参数.再也不用写一串的 SWITCH 了.字段参数的效 ...

随机推荐

  1. Lambda表达式的诞生过程

    这是一篇很经典的文章,解决了工作中一些使用过但是又不太明白的知识点,今天终于弄明白了.花了一晚上重新整的,坚决要分享出来!!! 那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的 ...

  2. 简历生成平台项目开发-STEP5初步界面demo实现

    谭卓因为暑期实习,去杭州实习了,走之前在git上上传了一些文档(https://github.com/USTC-CV-creator/),项目到目前为止,前端demo已经做好,后台接收请求生成PDF部 ...

  3. SE Springer小组之《Spring音乐播放器》可行性研究报告三、四

    3 对现有系统的分析 由于本次可行性分析主要是建立在团队自行实现一个音乐软件的目标上,并不是在一个现有系统的基础上开发改进的新系统.因此这里将分析一款市面上已经存在的音乐软件(以下称为W音乐),并为之 ...

  4. uploadify插件Http Error(302)错误记录(MVC)

    由于项目(asp.net MVC)需要做一个附件上传的功能,使用的是jQuery的Uploadify插件的2.1.0版本,上传文件到自己项目指定的文件夹下面.做完之后,在谷歌上测试是正确的,在火狐上报 ...

  5. PHP中的数据库三、redis

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  6. windows下redis安装

    最近因公司项目原因,去了趟昆明出差,其中第一次接触安装redis,配置sentinel,学习到不少,但也都是皮毛而已,本随笔记下所学知识. 1.首先介绍下redis,来源自百度百科 redis是一个k ...

  7. uva 11059 maximum product(水题)——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB1QAAAMcCAIAAABo0QCJAAAgAElEQVR4nOydW7msuhKF2wIasIAHJK

  8. BZOJ 1927: [Sdoi2010]星际竞速

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2051  Solved: 1263[Submit][Stat ...

  9. [LeetCode] First Missing Positive 首个缺失的正数

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  10. 【三石视频教程】当FineUIPro遇到ReportViewer

    FineUIPro 下个版本(v2.8.0)即将支持 ReportViewer,为此三石特别制作了一期视频教程,供大家参考. 运行效果图:   视频下载:http://pan.baidu.com/s/ ...