最近做的一个项目中需要用到图集,做了个实验,一张1024的png,NGUI生成的图集要比texturepacker大出100kb来,所以决定用texturepacker制作图集再给NGUI用,但是有个问题,在使用texturepacker制作的图集时需要替换相应的大图和配置文件,只有一个图集还好办,但是我要使用100个图集,如果每个都手动拖拽,还不得累死我啊,so想用代码一键生成,NGUI没有这样的功能,只能自己写插件了,过程还算顺利,只是有一个地方,导入tp配置文件时愣是没找到这个方法或者属性,头都大了,后来,我随便拖一个文件到tp import项中,有个警告,顺着这个警告我就找到了那个方法,看来报错也是一件好事啊!
代码奉上,注意,继承Eidtor时才可以使用解析字符串的方法,所以脚本要放在Editor文件夹中,在使用前确保tp的图集和配置文件已按照一定的命名规则放在Resources文件夹或者子文件夹中。
using UnityEngine;using System.Collections;using UnityEditor;using System.Collections.Generic;public class Prefab__ : Editor{ [MenuItem("OOIII/prefab_1")] static void Prefab_() { GameObject tempObj = new GameObject(); tempObj.AddComponent<UIAtlas>(); for (int i = -10; i < 11; i++) { for (int j = 0; j < 5; j++) { string fileName = "LP_HG020_" + i.ToString() + "_" + j.ToString(); //创建材质球 Material emptyMat = new Material(Shader.Find("Unlit/Transparent Colored")); AssetDatabase.CreateAsset(emptyMat, "Assets/Resources/Prefabs/" + fileName + ".mat"); emptyMat = Resources.Load("Prefabs/" + fileName, typeof(Material)) as Material; Texture t2d = Resources.Load("Prefabs/" + fileName, typeof(Texture)) as Texture; emptyMat.mainTexture = t2d; //给临时go赋材质 tempObj.GetComponent<UIAtlas>().spriteMaterial = emptyMat; //导入配置文件 TextAsset txt = Resources.Load("Prefabs/" + fileName, typeof(TextAsset)) as TextAsset; NGUIJson.LoadSpriteData(tempObj.GetComponent<UIAtlas>(), txt); //创建预设体 string fileLocation = "Assets/Resources/Prefabs/" + fileName + ".prefab"; Object emptyObj = PrefabUtility.CreateEmptyPrefab(fileLocation); PrefabUtility.ReplacePrefab(tempObj, emptyObj, ReplacePrefabOptions.ConnectToPrefab); } } Editor.DestroyImmediate(tempObj); AssetDatabase.Refresh(); }}
暂无评论