- 最后登录
- 2019-12-25
- 注册时间
- 2012-8-24
- 阅读权限
- 90
- 积分
- 71088
 
- 纳金币
- 52352
- 精华
- 343
|
因为工作需求,做了个批量修改材质为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
- }
- }
- }
复制代码 |
|