整理一下最近的工作

    上周开始,帮主程给特效做工具,先是写了个用命令行调用TexturePacker,打包指定文件夹图集的工具。解决他们制作特效的时候,被Unity的spritePacker折磨的痛苦,但是写完这个工具,就开始了把他们的痛苦嫁接到我身上了。

    打包图集自然很简单,网上随便抄一下,改改参数就完成了。

 /// <summary>
    /// 命令行打包图集工具
    /// </summary>
    public static void BuildTexturePacker()
    {
        //--trim - mode None--pack - mode Best--algorithm MaxRects --max - size 2048--size - constraints POT--disable - rotation--scale 1  --max-size 1024
        //选择并设置TP命令行的参数和参数值
        string commandText = " --sheet {0}.png --data {1}.tpsheet --format unity-texture2d --width 1024 --height 1024 --shape-padding 5 --force-squared --trim-mode Crop {2}";
        Object[] items = Selection.GetFiltered(typeof(Object), SelectionMode.Assets);
        if(items == null || items.Length == 0)
        {
            EditorUtility.DisplayDialog("Fail", "没有选中任何对象,请右键选中文件夹--打该文件夹TP图集!!", "确认");
            return;
        }

        string path = AssetDatabase.GetAssetPath(items[0]);

        string inputPath = Application.dataPath + path.Replace("Assets", "");//小图目录
        string outputPath = string.Format("{0}/TexturePacker", Application.dataPath);//用TP打包好的图集存放目录

        string[] fileName = Directory.GetFiles(inputPath);
        StringBuilder sb = new StringBuilder("");
        for(int j = 0; j < fileName.Length; j++)
        {
            string extenstion = Path.GetExtension(fileName[j]);
            if(extenstion == ".png")
            {
                sb.Append(fileName[j]);
                sb.Append("  ");
            }
            Debug.Log("fileName [j]:" + fileName[j]);
        }
        string name = Path.GetFileName(inputPath);
        string sheetName = string.Format("{0}/SheetsByTP/{1}", Application.dataPath, name);

        //执行命令行
        ShellHelper.ProcessCommand("TexturePacker", string.Format(commandText, sheetName, sheetName, sb.ToString()), null);
        AssetDatabase.Refresh();
    }

    图集是打出来了,接着就要解决替换的问题,我又写了工具,遍历预制去替换现有特效的图片,把现有特效的引用改到图集上,用名称去查找,这种遍历替换也很简单,一会儿就写完了。

    替换好了,大家鼓掌,和平一段时间,隔了一周,特效开始给我找茬了,你这个打图集工具,资源怎么对不上号了,我就把A图集的3张图移动到了B图集。What the fuck,还有这种操作,我一看sourceTree的修改记录,由于特效移动图集,然后工具重新打出来的图集,fileID全部变掉了,之前引用到对应的fieldID瞬间错乱。

  这就很蛋疼了,你图集好好的还要移动图,还要搞跨图集联欢,那我也不能不做,坑都挖出来了,只能自己跳进去填了,找了好久总算用反射拿到了fieldID,但是怎么都写入不到meta文件,我还尝试读取meta文件,直接替换fieldID,但是,不知道为啥图集文件就被我损坏了,unity给我来个GetObject failed to find Object for Library,真是令人费解,网上也没有解决。

    最后实在不行了,认怂,只能遍历预制,读取预制文件的字符串,replace 字符串的fileID: 21300072, guid: 7fd9f5832f43b2f4e889775c7828dbe2,到指定guid和fieldID 用人工来搞定,讲道理这个可以配个表来替换,但是感觉为此写个读表的功能没什么意义,就让这件蛋疼的事情到此为止吧!

   记录一下工作上遇到的烦心事。顺便了解了一下Unity记录文件的方式。

1. GUID与fileID(本地ID)
>   Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。还有fileID(本地ID),用于标识资源内部的资源。==资源间的依赖关系通过GUID来确定==;==资源内部的依赖关系使用fileID来确定==。

 Unity资源机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值