unity编辑器拓展一——删除项目工程里的未使用Shader

1.描述

  我们在做项目的时候,美术会放很多shader在项目中,有一部分是没有用到的,想删又怕删错,会导致一些材质球丢shader,显示紫色。

今天就来想办法把多余的shader删干净。

2.分析

  在写代码之前,先分析下思路。首先我们要分析shader会被哪些文件引用,我找到了下面的两种情况。

1.material 这种情况是最常规的,所有用到的材质球都会依赖自己的shader

2.scene 这种情况不多,但是也会有,一般是屏幕特效之类的东西,在相机上挂了一个脚本,然后脚本里面挂上shader,并没有产生材质球。

研究了一下发现,这种shader是依赖在scene文件中。

3.游戏的时候动态运用的shader,这种情况只要在c#文件中搜索,如果包含shader名字,说明shader是用到的。

3.思路

  根据上面的分析,我们先整理出一个框架,然后再开始写代码,这是一个好的习惯,在写代码之前先用中文把思路表达清楚,写起来

就不会乱了,扯远了哈,继续说框架。

1.指定目录,一般只要在项目的某个路径里执行就可以了 

1.查找出项目中所有的材质球,特点是文件名包含 “.mat”,将其文件路径加入到数组A 

2.查找出项目中所有的scene,特点是文件名包含“.unity”,将其文件路径加入到数组B

3.查找出项目中所有的shader,特点是文件名包含“.shader”,将其文件路径加入到数组C

4.查找出c#文件使用的shader,将其加到数组C里面

5.通过shaderGuid将引用在mat和scene的shader找出来,将其加入数组D

6.通过数组C与D ,得出没有用到的shader路径,将其加入到数组E

7.删除E

 这样我们就可以开始写代码了

4.代码

  里面的代码全部是加上详细注释的,应该不难看懂

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text.RegularExpressions;





public class DelectShader : EditorWindow
{

    private static List<string> matPahtList = new List<string>(); //所有的material路径数组
    private static List<string> scenePathList = new List<string>();//所有的scene路径数组
    private static List<string> allshaderPahtList = new List<string>();//所有shader路径数组
    private static List<string> useShaderPathList = new List<string>();//所有用到的shader路径数组
    private static List<string> noUseShaderList = new List<string>();//没用到shader路径
    private static List<string> allCsPathList = new List<string>(); //所有c#数组

    [MenuItem("Game-X/删除多余shader")]


    //菜单调用这个函数
    static void GetNotQuoteShaderPath()
    {
        instantPathList(); //实例化三个数组:1 所有的shader 2 在材质球中用到的shader 3 在scene中用到的shader
        addMat();  // 将 在材质球中用到的shader + 到用到的shader数组里
        addScene();// 将 在scene中用到的shader + 到用到的shader数组里
        addCs();   // 将 在 c#中用到的shader + 到用到的shader数组里
        noUseShader();//通过 “所有的shader” 和 “所有用到的shader” 得出没有用到的shader
        deletes();//删除没有用到的shader
    }




    //获取所有的shader 和 mat 和 scene的路径
    static void instantPathList()
    {   //Application.dataPath:Assets路径  这里相当于“Assets/resourcex” 项目里用到的shader跟mat只在这个文件夹里面
        string path = Application.dataPath+ "/resourcex";
        //Di
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值