对于大型项目,可能需要统一设置同一种类型资源的导入,而不需要每导入一个资源就设置一遍,比如texture,默认的材质是一种设置, Lightmap材质是另外一种设置
TexturesDefault and TexturesLighting 文件夹各有一个预设置
下面的脚本根据您导入asset的文件夹应用一个preset。如果文件夹中没有预置,此脚本将搜索父文件夹。如果在父文件夹中没有预设,Unity使用预设窗口指定的默认预设。
using System.IO;
using UnityEditor;
using UnityEditor.Presets;
public class PresetImportPerFolder : AssetPostprocessor
{
void OnPreprocessAsset()
{
// Make sure we are applying presets the first time an asset is imported.
//当该资源导入且没有meta文件
if (assetImporter.importSettingsMissing)
{
// Get the current imported asset folder.
//得到资源导入的文件夹名字
var path = Path.GetDirectoryName(assetPath);
if(!string.IsNullOrEmpty(path))
{
// Find all Preset assets in this folder.
// 找到该路径下所有的preset,并返回他们的guid
var presetGuids = AssetDatabase.FindAssets("t:Preset", new[] { path });
foreach (var presetGuid in presetGuids)
{
// Make sure we are not testing Presets in a subfolder.
//得到他们的路径
string presetPath = AssetDatabase.GUIDToAssetPath(presetGuid);
//如果preset的路径所在的文件夹和资源导入的文件夹一样,也就是它俩在同一个文件夹下
if (Path.GetDirectoryName(presetPath) == path)
{
// Load the Preset and try to apply it to the importer.
//加载得到这个preset
var preset = AssetDatabase.LoadAssetAtPath<Preset>(presetPath);
//把预设应用到导入的资源上
if (preset.ApplyTo(assetImporter))
return;
}
}
}
}
}
}