查看: 1057|回复: 0
打印 上一主题 下一主题

[其他] 批量修改材质+添加贴图

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52352
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2015-11-20 03:53:40 |只看该作者 |倒序浏览

因为工作需求,做了个批量修改材质为Reflective+Specular(反射高光)然后批量添加Cubemap这么个需求所以顺便做了个编辑器小工具,其实扩展开了可以作为批量添加修改材质,并且批量添加贴图的,不过这些就由需求去定了。
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;
  4. using System.Collections.Generic;
  5. using System.IO;

  6. public class CubeMapAddScript : EditorWindow
  7. {
  8.     /// <summary>
  9.     /// 生成一个EditorWindow工具
  10.     /// </summary>
  11.         [MenuItem("Custom/OperateMaterial")]
  12.     static void Excute()
  13.     {
  14.         EditorWindow myWindow = EditorWindow.GetWindowWithRect<CubeMapAddScript>(new Rect(100, 100, 1000, 1000));
  15.         myWindow.Show();

  16.     }

  17.     private string path;    //本来是打算写贴图所在文件夹路径去按照名字一一对应赋贴图的,后来美术说这个不用就算了。

  18.     private Cubemap optionalCubemap;    //添加的cubemap


  19.     void OnGUI()
  20.     {
  21.         EditorGUILayout.BeginVertical();

  22.         optionalCubemap = EditorGUILayout.ObjectField("CubeMap", optionalCubemap, typeof(Cubemap), false) as Cubemap;   //这里是选择cubemap

  23.         if (GUILayout.Button("修改为反射高光(Reflect+Specular)材质"))
  24.         {
  25.             ChangeMaterial_ReflectSpecular(path, optionalCubemap);  //path参数可以不要,多余了
  26.         }
  27.         EditorGUILayout.EndVertical();
  28.     }

  29.     void ChangeMaterial_ReflectSpecular(string path,Cubemap optionalCubemap)
  30.     {
  31.         path = "Asset" + "/" + path;

  32.         Object[] selectObj = Selection.gameObjects; //获取选中的物体,无论是Hierarchy中还是prefab都可以

  33.         for (int i = 0; i < selectObj.Length; i++)
  34.         {
  35.             GameObject tmp = selectObj[i] as GameObject;
  36.             tmp.GetComponent<Renderer>().sharedMaterial.shader= Shader.Find("Legacy Shaders/Reflective/Specular");  //根据材质名去选择,需要拓展的话可以用个列表存放然后去选择对应材质就行
  37.             tmp.GetComponent<Renderer>().sharedMaterial.SetTexture("_Cube", optionalCubemap);   //这里我只改了cubemap
  38.          }
  39.     }
  40. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-8-3 11:02 , Processed in 0.114507 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部