Unity3d PackingTag 字母大小写问题,导致图集错误的解决办法

发表于2017-11-21
评论0 1k浏览

Windows 的文件系统对文件名大小写是不区分的,小写文件名 和 大写文件名 代表的是同一个文件。


今天在打包 Assetbundle 的时候,发现打包出来的图集 缺了很多图片,测试了一下才发现是 Packing Tag 设置,有些图片是大写的 Packing Tag,有些是小写的。

如果小写的图片后打包,就会覆盖掉 大写的,大写 Packing Tag的图集就丢了,那么导致图集错误后有什么办法去解决呢?下面就给大家分享下方法。


那么对于老项目,总的想个办法去把这些 Packing Tag设置错误的问题找出来并修改。

解决代码如下:

/************************** 
 * 文件名:FindDifferentCasePackingTag.cs; 
 * 文件描述:查找相同字符但是大小写不同的PackingTag; 
 * 创建日期:2016/05/30; 
 * Author:ThisisGame; 
 * Page:https://github.com/ThisisGame/FindDifferentCasePackingTag 
 ***************************/  
using UnityEngine;  
using System.Collections;  
using UnityEditor;  
using System.Collections.Generic;  
namespace ThisisGame  
{  
    public class FindDifferentCasePackingTag  
    {  
        [MenuItem("Assets/FindSameLowerUpperPackingTag")]  
        public static void FindErrorPackingTag()  
        {  
            //PackingTags  
            List<string> packingTags = new List<string>();  
            //PackingTag -- 文件列表  
            Dictionary<string, List<string>> imagePackingTags = new Dictionary<string, List<string>>();  
            UnityEngine.Object[] arr = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);  
            for (int index = 0; index < arr.Length; index++)  
            {  
                string filePath = AssetDatabase.GetAssetPath(arr[index]);  
                //Debug.Log(filePath);  
                Sprite sprite = Resources.LoadAssetAtPath<Sprite>(filePath);  
                if (sprite == null)  
                    continue;  
                TextureImporter ti = AssetImporter.GetAtPath(filePath) as TextureImporter;  
                if (ti.spritePackingTag.Trim() != string.Empty)  
                {  
                    if (!imagePackingTags.ContainsKey(ti.spritePackingTag))  
                    {  
                        imagePackingTags.Add(ti.spritePackingTag, new List<string>());  
                    }  
                    imagePackingTags[ti.spritePackingTag].Add(filePath);  
                }  
            }  
            //找出存在大小写字母的PackingTag  
            foreach (var info in imagePackingTags)  
            {  
                packingTags.Add(info.Key);  
            }  
            for (int i = 0; i < packingTags.Count; i++)  
            {  
                if (packingTags[i] == string.Empty) continue;  
                for (int j = 0; j < packingTags.Count; j++)  
                {  
                    if (packingTags[j] == string.Empty) continue;  
                    if (packingTags[j] != packingTags[i] && packingTags[j].ToLower() == packingTags[i].ToLower())  
                    {  
                        List<string> listA = imagePackingTags[packingTags[i]];  
                        List<string> listB = imagePackingTags[packingTags[j]];  
                        for (int indexA = 0; indexA < listA.Count; indexA++)  
                        {  
                            Debug.Log(packingTags[i] + "  : " + listA[indexA]);  
                        }  
                        for (int indexB = 0; indexB < listB.Count; indexB++)  
                        {  
                            Debug.LogError(packingTags[j] + "  : " + listB[indexB]);  
                        }  
                    }  
                }  
                packingTags[i] = string.Empty;  
            }  
        }  
    }  
}  


使用方式,在图片总目录上右键点击  FindDifferentCasePackingTag


使用结果


代码下载:https://github.com/ThisisGame/FindDifferentCasePackingTag  

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论