这个工具使用前需要生成对应名称的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();
}
}