当我们导入资源时,有时需要对资源进行一些初始化修改或者格式规范等操作,例如,我们导入配置文件的时候,需要将编码格式规定为UTF-8,或者在做自动打包工具,打包AB时,导入模型的时候,按照设定的模板或者规则,对导入的FBX文件进行初始化(是否生成碰撞,支持读写,接受光照等),如果等到导入完成之后,重新生成AssetImporter再去修改,会增加性能消耗,所以我们最好是一步到位。
方法么,比较简单,主要用到AssetPostprocessor这个类,新建一个脚本,继承这个类,然后就可以开始我们的工作了,下面是一个简单的例子,这边只展示了模型的相关操作,其他的都类似。
using UnityEditor;
using UnityEngine;
public class AssetImportTest : AssetPostprocessor
{
// 这个函数必须为静态的,其他随意,甚至可以是私有的,类似于update,start等生命周期,名字正确即可
static void OnPostprocessAllAssets(
string[] importedAssets,
string[] deletedAssets,
string[] movedAssets,
string[] movedFromAssetPaths)
{
foreach (var path in importedAssets)
{
Debug.Log("现在导入的文件的路径是" + path);
}
}
public void OnPreprocessModel()
{
Debug.Log("导入模型前 OnPreprocessModel");
ModelImporter modelImporter = (ModelImporter)assetImporter;
}
//--导入模型后
public void OnPostprocessModel(GameObject gameObject)
{
Debug.Log("导入模型后 OnPostprocessModel");
}
}
下面是官网的内容,有详细的API说明UnityEditor.AssetPostprocessor - Unity 脚本 API
需要用的朋友可以自行取用
还有顺带说一下,如果导入的是unitypackage类型的文件,可以直接使用AssetDatabase类下面相关的API进行操作。UnityEditor.AssetDatabase - Unity 脚本 API
顺带附一个简单的使用示例
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
public static class Example
{
static Example()
{
// .unitypackage 开始导入
AssetDatabase.importPackageStarted += packageName =>
{
Debug.Log(packageName);
};
// .unitypackage 导入成功
AssetDatabase.importPackageCompleted += packageName =>
{
Debug.Log(packageName);
};
// .unitypackage 取消导入
AssetDatabase.importPackageCancelled += packageName =>
{
Debug.Log(packageName);
};
// .unitypackage 导入失败
AssetDatabase.importPackageFailed += (packageName, errorMessage) =>
{
Debug.Log(errorMessage);
};
}
}