unity怎么导入系统的树_Unity做导入资源的统一处理

首先提一下 AssetPostprocessor 这个类

是一个编辑器类,一个资源导入的一个管理器,在资源导入之前和之后可以根据导入的资源做一些设置和一些数据的修改,比如网格,纹理的压缩,模型添加组件等。当资源导入之前和之后都会发送通知,可以根据不同的资源类型,在导入之前和之后做不同的处理Unity3d_AssetPostprocessor简单用法 - yhy2218的专栏 - CSDN博客​blog.csdn.netUnity3d资源处理器AssetPostprocessor简单用法 - linxinfa的专栏 - CSDN博客​blog.csdn.netUnity 之 自动设置导入资源属性选项(模型、图片、声音)​yq.aliyun.com

上面文章介绍的都比较详细了,都是我写的时候翻到的。

后面主要讲一下我项目用到的东西。

public class AutoImportSetting : AssetPostprocessor

{

void OnPreprocessAudio()

{

AudioImporter importer = (AudioImporter)assetImporter;

if (importer.assetPath.Contains("Music"))

{

AudioImporterSampleSettings setting = new AudioImporterSampleSettings();

setting.loadType = AudioClipLoadType.Streaming;

setting.compressionFormat = AudioCompressionFormat.Vorbis;

setting.quality = 100;

importer.defaultSampleSettings = setting;

importer.preloadAudioData = false;

importer.loadInBackground = true;

importer.forceToMono = false;

}

else if (importer.assetPath.Contains("Sfx") ||

importer.assetPath.Contains("Se") ||

importer.assetPath.Contains("Vox") ||

importer.assetPath.Contains("UI"))

{

AudioImporterSampleSettings setting = new AudioImporterSampleSettings();

setting.loadType = AudioClipLoadType.DecompressOnLoad;

setting.compressionFormat = AudioCompressionFormat.ADPCM;

importer.defaultSampleSettings = setting;

importer.preloadAudioData = false;

importer.loadInBackground = false;

importer.forceToMono = false;

}

importer.ClearSampleSettingOverride("Android");

importer.ClearSampleSettingOverride("iOS");

}

void OnPreprocessTexture()

{

//自动设置类型;

TextureImporter textureImporter = (TextureImporter)assetImporter;

var path = AssetDatabase.GetAssetPath(textureImporter);

if (!path.Contains(@"Assets/Resources"))//主要是针对是否导入项目某个文件夹下进行判断

{

return;

}

textureImporter.textureType = TextureImporterType.Sprite;

textureImporter.spriteImportMode = SpriteImportMode.Single;

SetTextureFormat(textureImporter);

//TextureImporterPlatformSettings importPlatformAndroid = textureImporter.GetPlatformTextureSettings("Android");

//importPlatformAndroid.overridden = true;

//是否存在透明通道 例如虽是png格式 但是不存在透明通道可根据需求对图形单独做处理

//if (textureImporter.DoesSourceTextureHaveAlpha())

//{

// importPlatformAndroid.format = TextureImporterFormat.ASTC_RGBA_4x4;

//}

//else

//{

// importPlatformAndroid.format = TextureImporterFormat.ASTC_RGBA_4x4;

//}

//textureImporter.SetPlatformTextureSettings(importPlatformAndroid);

//TextureImporterPlatformSettings importPlatformIos = textureImporter.GetPlatformTextureSettings("iPhone");

//importPlatformIos.overridden = true;

//importPlatformIos.format = TextureImporterFormat.ASTC_RGBA_4x4;

//textureImporter.SetPlatformTextureSettings(importPlatformIos);

}

另外 上述这种方法对texture进行的是强制处理,也可手动进行修改,相对而言,代码手动修改比编译器进行全部处理要快得多。

[MenuItem("美术工具/修改Picture所有参数")]

public static void SetAllTextureType()

{

//针对目录下的所有文件进行遍历 取出.png和.jpg文件进行处理 可自行拓展

DirectoryInfo direction = new DirectoryInfo(Application.dataPath + @"\Resources\Picture");

FileInfo[] pngFiles = direction.GetFiles("*.png", SearchOption.AllDirectories);

FileInfo[] jpgfiles = direction.GetFiles("*.jpg", SearchOption.AllDirectories);

SetTexture(pngFiles);

SetTexture(jpgfiles);

}

static void SetTexture(FileInfo[] fileInfo)

{

for (int i = 0; i < fileInfo.Length; i++)

{

//这里第一次写时有一个接口可直接调用,但是第二次写时找不到了 所以用了切割字符

string str = fileInfo[i].FullName;

string resultA = str.Replace("Assets", "|");

string[] splitStr = resultA.Split('|');

string path = "Assets" + splitStr[1];

TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;

AutoImportSetting.SetTextureFormat(textureImporter);

}

}

通过上面这种方法可以对项目内所有图片资源进行处理,其他例如音频 模型也是同样道理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值