当前位置: 代码迷 >> 综合 >> Unity 导入资源自动配置属性(audio module texture spriteAtlas)
  详细解决方案

Unity 导入资源自动配置属性(audio module texture spriteAtlas)

热度:66   发布时间:2023-12-03 18:35:07.0

自动把导入资源的属性配置成想要的样子,提高效率,防止不小心配置错

 

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

  相关解决方案