批量设置FBX文件导入模型切线方式
请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
原理 利用AssetDatabase.FindAssets("t:Model")找出所有的FBX模型的GUID。再利用AssetDatabase.GUIDToAssetPath将GUID转为文件路径。然后使用 AssetImporter.GetAtPath函数拿到 模型导入器(ModelImporter) 对象。模型导入期对象里面就有一个importTangents属性项,当此项为None时表示没切线,其他选项都表示带有切线信息。下面是查找所有带有切线信息的模型的函数。
/// <summary> /// 查找出带有切线信息的模型 /// </summary> /// List<string> mikkTSpace 使用Morten Mikkelsen切线空间(MikkTSpace)算法计算生成切线的模型文件名 /// List<string> calculateLegacy 使用传统的算法计算生成切线的模型文件名 /// List<string> calculateLegacyWithSplitTangents,使用传统的算法,并对UV图表进行拆分的方式,计算生成切线的模型文件名 /// List<string> imported 从原始文件中导入切线的模型文件名 private void FindAllModelsContainTangent(List<string> mikkTSpace,List<string> calculateLegacy, List<string> calculateLegacyWithSplitTangents,List<string> imported) { // 使用了库函数,用"t:Model"参数检索所有的模型文件。即FBX文件 // 返回的是所有fbx的GUID string[] allModels = AssetDatabase.FindAssets("t:Model"); for (int i = 0; i < allModels.Length; i++) { // 把GUID换成资源文件路径名,然后使用AssetImporter模块获取到模型导入器 string modelPath = AssetDatabase.GUIDToAssetPath(allModels[i]); var modelImporter = AssetImporter.GetAtPath(modelPath) as ModelImporter; if (modelImporter == null) continue; switch (modelImporter.