Unity3D研究院之自制批量修改Shader插件(五十七)






Unity3D研究院之自制批量修改Shader插件(五十七)




 美工兄弟创建FBX模型带了好几十个贴图,每一个贴图都需要手动设置一下Shader,美工兄弟显然Hold不住了,作为一个程序帮他想想办法把,嘿嘿。我用了一下午的时间帮他写了一小插件。 如下图所示,ChangerShader是插件的代码,shader.txt是配置文件,把它俩都放在Editor文件夹中。

 

屏幕快照 2013-05-06 下午6.24.22

 

先看看shader.txt的配置文件,它就是配置批量修改Shader的列表,这里可以选择系统自带的Shader,也可以选择你自己创建的Shader,只要名称选择对就可以。配置文件Shader的你也可以继续添加,只要资源中有就可以。记住中间用& 字符隔开就可以,

1 Diffuse&
2  
3 Mobile/Diffuse&
4  
5 Transparent/Diffuse&
6  
7 Mobile/Transparent/Vertex Color&
8  
9 Custom/NewShader

 

Custom/NewShader是我自己创建的Shader。如下图所示,Shader的名称可以由你任意配置。

 

屏幕快照 2013-05-06 下午6.31.05

 

用法非常的简单,如下图所,在Hierarchy视图中选择需要批量修改的对象,然后在Unity导航菜单栏中选择Window->ChangerShader。你可以放心选择对象,程序会自动检测你选择的对象是否可以修改Shader。

 

屏幕快照 2013-05-06 下午6.26.38

 

 

如下图所示,然后点击需要批量修改的Shader吧。在看看模型材质上的Shader,是不是很神奇,哇咔咔。。

屏幕快照 2013-05-06 下午6.33.55

 

 

目前这个小插件我在我的工程中已经完美测试通过,但是不代表没有一点BUG,MOMO希望大家多多使用给我提点意见。

ChangeShader.cs 插件的源码。 比较简单,我就不注释了。 核心就是根据Hierarchy视图中的游戏对象找到它的材质组件,如果组件中使用过Project视图中的资源文件的Shader文件,然后在Project中找到该资源文件的路径,最后获取这个资源对象并且修改它。

 

01 using UnityEngine;
02 using System.Collections;
03 using UnityEditor;
04  
05 public class ChangeShader :  EditorWindow {
06  
07   static TextAsset textAsset;
08   static  string [] lineArray;
09    [MenuItem ("Window/ChangerShader")] 
10     static void AddWindow ()
11     {      
12         textAsset = Resources.LoadAssetAtPath("Assets/Editor/shader.txt",typeof(TextAsset))as TextAsset;
13  
14         lineArray = textAsset.text.Split ("&"[0]);
15  
16         Rect  wr = new Rect (0,0,500,500);
17         ChangeShader window = (ChangeShader)EditorWindow.GetWindowWithRect (typeof (ChangeShader),wr,true,"widow name");   
18         window.Show();
19  
20     }
21  
22     private Shader shader;
23  
24     void OnGUI ()
25     {
26         for(int i =0; i<lineArray.Length; i++)
27         {
28             string shaderName = lineArray[i].Trim();
29             if(GUILayout.Button(shaderName))
30             {
31                 Change(Shader.Find(shaderName));       
32             }
33         }
34     }
35  
36     void Change(Shader shader)
37     {
38         if(Selection.activeGameObject != null)
39         {
40             foreach(GameObject g in Selection.gameObjects)
41             {
42                 Renderer []renders = g.GetComponentsInChildren<Renderer>();
43                 foreach(Renderer r in renders)
44                 {
45                     if(r  !=  null)
46                     {
47                         foreach(Object o in r.sharedMaterials)
48                         {
49                                 string path = AssetDatabase.GetAssetPath(o);
50                                 Material m = Resources.LoadAssetAtPath(path,typeof(Material)) as Material;
51                                 m.shader = shader;             
52                         }
53                     }
54                 }
55             }  
56             this.ShowNotification(new GUIContent("选择的对象批量修改shader成功"));
57         }else
58         {
59             this.ShowNotification(new GUIContent("没有在Hierarchy视图中选择对象"));
60  
61         }
62     }
63  
64 }

 批量修改完毕啦。哇咔咔

屏幕快照 2013-05-06 下午6.37.34

 

 

最后是本文的下载地址 祝大家学习愉快,啦啦啦~~~

http://vdisk.weibo.com/s/An5pr













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值