纳金网
标题:
批量修改材质+添加贴图
[打印本页]
作者:
may
时间:
2015-11-20 03:53
标题:
批量修改材质+添加贴图
因为工作需求,做了个批量修改材质为Reflective+Specular(反射高光)然后批量添加Cubemap这么个需求
所以顺便做了个编辑器小工具,其实扩展开了可以作为批量添加修改材质,并且批量添加贴图的,不过这些就由需求去定了。
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
public class CubeMapAddScript : EditorWindow
{
/// <summary>
/// 生成一个EditorWindow工具
/// </summary>
[MenuItem("Custom/OperateMaterial")]
static void Excute()
{
EditorWindow myWindow = EditorWindow.GetWindowWithRect<CubeMapAddScript>(new Rect(100, 100, 1000, 1000));
myWindow.Show();
}
private string path; //本来是打算写贴图所在文件夹路径去按照名字一一对应赋贴图的,后来美术说这个不用就算了。
private Cubemap optionalCubemap; //添加的cubemap
void OnGUI()
{
EditorGUILayout.BeginVertical();
optionalCubemap = EditorGUILayout.ObjectField("CubeMap", optionalCubemap, typeof(Cubemap), false) as Cubemap; //这里是选择cubemap
if (GUILayout.Button("修改为反射高光(Reflect+Specular)材质"))
{
ChangeMaterial_ReflectSpecular(path, optionalCubemap); //path参数可以不要,多余了
}
EditorGUILayout.EndVertical();
}
void ChangeMaterial_ReflectSpecular(string path,Cubemap optionalCubemap)
{
path = "Asset" + "/" + path;
Object[] selectObj = Selection.gameObjects; //获取选中的物体,无论是Hierarchy中还是prefab都可以
for (int i = 0; i < selectObj.Length; i++)
{
GameObject tmp = selectObj[i] as GameObject;
tmp.GetComponent<Renderer>().sharedMaterial.shader= Shader.Find("Legacy Shaders/Reflective/Specular"); //根据材质名去选择,需要拓展的话可以用个列表存放然后去选择对应材质就行
tmp.GetComponent<Renderer>().sharedMaterial.SetTexture("_Cube", optionalCubemap); //这里我只改了cubemap
}
}
}
复制代码
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5