public void Setup(string nodeName, string nodeId, string connectionIdToNextNode, Dictionary <string, List <Asset> > groupedSources, List <string> alreadyCached, Action <string, string, Dictionary <string, List <Asset> >, List <string> > Output) { // reserve importSetting type for limit asset. var importSettingSampleType = string.Empty; var outputDict = new Dictionary <string, List <Asset> >(); var first = true; if (groupedSources.Keys.Count == 0) { return; } // ImportSetting merges multiple incoming groups into one, so warn this if (1 < groupedSources.Keys.Count) { Debug.LogWarning(nodeName + " ImportSetting merges incoming group into \"" + groupedSources.Keys.ToList()[0]); } var inputSources = new List <Asset>(); foreach (var groupKey in groupedSources.Keys) { inputSources.AddRange(groupedSources[groupKey]); } var importedAssets = new List <Asset>(); var samplingDirectoryPath = FileUtility.PathCombine(AssetBundleGraphSettings.IMPORTER_SETTINGS_PLACE, nodeId); ValidateImportSample(samplingDirectoryPath, (string samplePath) => { // do nothing. keep importing new asset for sampling. }, (string samplePath) => { // do nothing. keep importing new asset for sampling. }, (string samplePath) => { importSettingSampleType = AssetImporter.GetAtPath(samplePath).GetType().ToString(); first = false; }, (string samplePath) => { throw new NodeException( String.Format("Too many sample file found for this import setting node. Delete files in {0} or use \"Clear Saved ImportSettings\" menu.", samplePath), nodeId); } ); var alreadyImported = new List <string>(); var ignoredResource = new List <string>(); foreach (var asset in inputSources) { if (string.IsNullOrEmpty(asset.absoluteAssetPath)) { if (!string.IsNullOrEmpty(asset.importFrom)) { alreadyImported.Add(asset.importFrom); continue; } ignoredResource.Add(asset.fileNameAndExtension); continue; } var assetType = AssetImporter.GetAtPath(asset.importFrom).GetType(); var importerTypeStr = assetType.ToString(); /* * only texture, model and audio importer is acceptable. */ switch (importerTypeStr) { case "UnityEditor.TextureImporter": case "UnityEditor.ModelImporter": case "UnityEditor.AudioImporter": { break; } default: { throw new NodeException("unhandled importer type:" + importerTypeStr, nodeId); } } var newData = Asset.DuplicateAssetWithNewType(asset, assetType); importedAssets.Add(newData); if (first) { if (!Directory.Exists(samplingDirectoryPath)) { Directory.CreateDirectory(samplingDirectoryPath); } var absoluteFilePath = asset.absoluteAssetPath; var targetFilePath = FileUtility.PathCombine(samplingDirectoryPath, asset.fileNameAndExtension); EditorUtility.DisplayProgressBar("AssetBundleGraph ImportSetting generating ImporterSetting...", targetFilePath, 0); FileUtility.CopyFileFromGlobalToLocal(absoluteFilePath, targetFilePath); first = false; AssetDatabase.Refresh(ImportAssetOptions.ImportRecursive); EditorUtility.ClearProgressBar(); importSettingSampleType = AssetImporter.GetAtPath(targetFilePath).GetType().ToString(); } else { if (importerTypeStr != importSettingSampleType) { throw new NodeException("Multiple asset type is given to Importer Settings. ImporterSetting Takes only 1 asset type." + nodeName + " is configured for " + importSettingSampleType + ", but " + importerTypeStr + " found.", nodeId); } } if (alreadyImported.Any()) { Debug.LogError("importSetting:" + string.Join(", ", alreadyImported.ToArray()) + " are already imported."); } if (ignoredResource.Any()) { Debug.LogError("importSetting:" + string.Join(", ", ignoredResource.ToArray()) + " are ignored."); } outputDict[groupedSources.Keys.ToList()[0]] = importedAssets; } Output(nodeId, connectionIdToNextNode, outputDict, new List <string>()); }