Unity3d 实用篇(三) 图集转Prefab工具

本文介绍了一款Unity工具,该工具能够将图集资源转换为预设(Prefab),适用于游戏开发中需要批量处理图集的情况。使用时,通过绑定按钮调用特定方法,并在编辑器中选择目标图集,即可完成转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个工具使用前需要生成对应名称的Prefab!!

使用时先绑定按钮调用"Atlas2Prefab()"的方法,然后在Editor界面选中要选用的"图集",点击"Atlas2Prefab()"按钮,完成

public class AtlasTransformation
    {
        private static string prefabFilePath = "Assets/Runtime/Resources/atlas/";//图集路径文件夹
        private static string prefabName;
        private static string atlasPath;
        private static string atlasName;
        private static Sprite[] atlas;

        public static void Atlas2Prefab()
        {
            Object[] arr = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.TopLevel);//获取当前选中的图集信息

            atlasPath = AssetDatabase.GetAssetOrScenePath(arr[0]);

            Debug.Log(atlasPath.Remove(atlasPath.LastIndexOf("atlas")));
            atlasPath = atlasPath.Remove(0, 7);
            atlasName = arr[0].name;//过滤取出图集名

            switch (atlasName)//判断选择出对应的Prefab
            {
                case "atlas_emoji":
                    prefabName = "emoji_atlas.prefab";//不同图集名对应不同Prefab
                    break;
                case "atlas_poker133_175":
                    prefabName = "scene_pokercard_atlas.prefab";
                    break;
                case "atlas_mahjong_1":
                    prefabName = "atlas_mahjong_1.prefab";
                    break;
            }
            ChangePrefab(prefabName, atlasPath);

            AssetDatabase.SaveAssets();
        }

        private static void ChangePrefab(string prefab_name, string atlasPath)//替换原来的Prefab
        {
            GameObject prefabObject = AssetDatabase.LoadAssetAtPath<GameObject>(prefabFilePath + prefab_name);
            GameObject instance = PrefabUtility.InstantiatePrefab(prefabObject) as GameObject;
            Object[] ob = AssetDatabase.LoadAllAssetsAtPath("Assets/" + atlasPath);
            atlas = SpriteFormAtlas(ob);

            CAtlasAsset cAtlasAsset = instance.GetComponent<CAtlasAsset>();
            cAtlasAsset.Children = new CAtlasChild[atlas.Length];
            string name = string.Empty;
            for (int i = 0; i < atlas.Length; i++)
            {
                name = atlas[i].name.ToString();
                CAtlasChild child = new CAtlasChild(name, atlas[i]);
                cAtlasAsset.Children[i] = child;
            }

            var newprefab = PrefabUtility.CreateEmptyPrefab(prefabFilePath + prefab_name);
            PrefabUtility.ReplacePrefab(instance, newprefab, ReplacePrefabOptions.Default);
        }


        private static Sprite[] SpriteFormAtlas(Object[] _atlas)
        {
            List<Sprite> sps = new List<Sprite>();
            for (int i = 0; i < _atlas.Length; i++)
            {
                if (_atlas[i].GetType() == typeof(UnityEngine.Sprite))
                {
                    sps.Add((Sprite)_atlas[i]);
                }
            }
            return sps.ToArray();
        }

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值