Unity修改图集图片不可用重选解决方案for NGUI

在unity中。我们经常需要替换我们的图集图片。或者新增删除图集内的图片。当我们对图集重新打包后。发现。我们之前的预设的图片全都不显示了。

这里发下解决方案。具体思路。其实改预设引用的图片名字还保存在预设中。只是图集预设的引用出问题了。

那么。我们只需要把图集重新赋值上去就可以。只是人工赋值麻烦。故而写了插件。

另有兴趣可参阅本人写的插件制作系列博文。

 

代码:

[MenuItem("Assets/Custom/校正公用图集图片", false, 0)]
    public static void CorrectionPublicAtlasFunction()
    {
        if (NGUISettings.atlas == null)
        {
            Debug.LogError("对不起!你没有指定图集!");
        }
        else
        {
            CorrectionPublicAtlas();
        }
    }

private static void CorrectionPublicAtlas()
    {
        if (NGUISettings.atlas == null)
        {
            Debug.LogError("Select UIFont Is Null...");
            return;
        }
        else
        {
            Object[] selectObjs = Selection.GetFiltered(typeof(GameObject), SelectionMode.DeepAssets);
            foreach (Object selectObj in selectObjs)
            {
                GameObject obj = (GameObject)selectObj;
                if (obj == null || selectObj == null)
                {
                    Debug.LogWarning("ERROR:Obj Is Null !!!");
                    continue;
                }
                string path = AssetDatabase.GetAssetPath(selectObj);
                if (path.Length < 1 || path.EndsWith(".prefab") == false)
                {
                    Debug.LogWarning("ERROR:Folder=" + path);
                }
                else
                {
                    Debug.Log("Selected Folder=" + path);
                    GameObject clone = GameObject.Instantiate(obj) as GameObject;
                    UISprite[] sprites = clone.GetComponentsInChildren<UISprite>(true);
                    foreach (UISprite sprite in sprites)
                    {
                        if (sprite.spriteName.Length > 0)
                        {
                            UISpriteData data = NGUISettings.atlas.GetSprite(sprite.spriteName);
                            if (data != null)
                            {
                                sprite.atlas = NGUISettings.atlas;
                            }
                        }
                    }
                    SaveDealFinishPrefab(clone, path);
                    GameObject.DestroyImmediate(clone);
                    Debug.Log("CorrectionPublicAtlas Success=" + path);
                }
            }
            AssetDatabase.Refresh();
        }
    }

如上。就是代码了。详细可以参考 代码差不多

Untiy插件组件编写【4】Unity批量替换预设字体 for NGUI

本文链接:

https://bobsong.cn/285.html
1 + 4 =
2 评论
    2014年09月21日 回复

    2014年09月21日 回复