自动把导入资源的属性配置成想要的样子,提高效率,防止不小心配置错
spriteAtlas这个资源特殊,并没有找到类似图片、音频、等资源的管理资源的类(ModuleImporter/TextureImporter)在介绍完通常这几种再介绍spriteAtlas
下面是资源导入或操作后的回调接口,其他接口可以去官网查API : AssetPostprocessor(通过这个类可以找到所有资源的类型和属性以及设置)
ModelImporter(模型资源类创建对象) modelImporter = (ModelImporter)assetImporter;
基本上对资源的属性的操作都类似,具体的属性和设置可以去API里面查找
(代码有一些需要根据情况改过以后才能使用)
using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.UI; using System.Text.RegularExpressions; using System;
public class ResourceAutoSetting : AssetPostprocessor {
//模型导入之前调用
public void OnPreprocessModel() {
ModelImporter modelImporter = (ModelImporter)assetImporter;
//(assetImporter是导入的资源对象)
}
//模型导入之后调用 public void OnPostprocessModel(GameObject go) {
}
//纹理导入之前调用,针对导入的纹理进行设置 public void OnPreprocessTexture() {
}
//针对导入后的Texture进行处理
public void OnPostprocessTexture(Texture2D tex) {
}
//针对导入后的Sprite进行处理
void OnPostprocessSprites(Texture2D texture, Sprite[] sprites) {
}
//音频导入前处理
public void OnPreprocessAudio() {
}
//音频导入后处理
public void OnPostprocessAudio(AudioClip clip) {
}
//所有的资源的导入,删除,移动,都会调用此方法,注意,这个方法是static的 (这个是在 对应资源的导入前后函数执行后触发) public static void OnPostprocessAllAssets(string[] importedAsset, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) {
}
public void OnAssignMaterialModel(Material material, Renderer renderer) { //Debug.Log("OnAssignMaterialModel"); }
//将该函数添加到子类中,以便在导入模型(.fbx,.mb文件等)的动画之前获取通知。 这使您可以通过代码控制导入设置。 void OnPreprocessAnimation() { //Debuger.Log("OnPreprocessAnimation"); //var modelImporter = assetImporter as ModelImporter; //modelImporter.clipAnimations = modelImporter.defaultClipAnimations; }
}
spriteAtlas在创建资源时,并没有找到相应的类来管理,但是我在资源管理器中找到他的文件(xxx.spriteAtlas)然后用txt打开发现里面是枚举类型的字段,我就想可以通过直接更改源文件来达到我们想要的结果。通过c#的IO来直接读取新建的spriteAtlas文件内容然后直接重写,把图集更改成我们想要的样子,需要更改的内容我使用了一个预先设置好的图集文件的。
上代码:
//图集处理
#region spriteAtlasConfig
public static void OnPostprocessAllAssets(string[] importedAsset, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
foreach (string str in importedAsset)
{
Debug.Log("importedAsset = " + str);
if (str.EndsWith(".spriteatlas"))
{
Debug.Log("获取到新创建图集");
string path = Application.dataPath + str.Substring(6);
Debug.Log(path);
InitSpriteAtlas(path);
}
}
}
private static void InitSpriteAtlas(string path)
{
string[] standardF = File.ReadAllLines(Application.dataPath+"/ToolKit/DataSpriteAtlas.spriteatlas");
//(标准SpriteAtlas用来配置其他spriteAtlas。可以自己创建一个图集,然后把它配置成自己想要的样子,当做样本,新建的图集会按照这个样本设置)
//读取和写入都比较简单,可以自己看着更改
string[] initF = File.ReadAllLines(path);
string[] temp = new string[standardF.Length];
for (int i = 0;i<temp.Length;i++)
{
if (i < 9)
{
temp[i] = initF[i];
}
else if (i < 36)
{
temp[i] = standardF[i];
}
else
{
temp[i] = initF[i - 8];
}
}
File.WriteAllLines(path,temp);
AssetDatabase.Refresh();
}
}
#endregion spriteAtlasConfig