private void OpenSelectImportPathDialog(BehaviorControlSetting setting) { var importFolderPath = Prefs.ImportDirectory; if (string.IsNullOrEmpty(importFolderPath)) { importFolderPath = setting.GetImportFolderPath(); } selectionDirectory = null; var directory = EditorUtility.OpenFolderPanel("Import", importFolderPath, string.Empty); if (string.IsNullOrEmpty(directory)) { return; } if (!Directory.Exists(directory)) { Debug.LogErrorFormat("Directory {0} not found.", importFolderPath); } selectionDirectory = directory; displayDirectory = GetRelativeUriFromAssetsFolder(directory); Prefs.ImportDirectory = directory; }
private string ConvertDataPathToAssetPath(BehaviorControlSetting setting, string dataPath) { var exportFolderPath = setting.GetExportFolderPath(); var localPath = dataPath.Substring(selectionDirectory.Length); var exportPath = PathUtility.Combine(exportFolderPath, localPath); var assetPath = Path.ChangeExtension(exportPath, ".asset"); return(assetPath); }
private void Generate(BehaviorControlSetting setting, Dictionary <string, ImportData> importData) { var success = true; var failedMessage = new StringBuilder(); if (importData.Any()) { failedMessage.AppendLine("Failed:"); Action <string> onErrorCallback = message => { using (new DisableStackTraceScope(LogType.Error)) { Debug.LogError(message); } }; var dataBuilder = new ImportDataConverter <TBehaviorData, TAction, TTarget, TCondition>(onErrorCallback); using (new AssetEditingScope()) { foreach (var item in importData) { var dataPath = item.Key; var assetPath = ConvertDataPathToAssetPath(setting, dataPath); var behaviorData = dataBuilder.Convert(dataPath, item.Value); if (behaviorData != null) { var lastUpdate = File.GetLastWriteTimeUtc(item.Key); var result = CreateBehaviorDataAsset(assetPath, behaviorData, lastUpdate); if (!result) { failedMessage.AppendFormat("- {0}", assetPath).AppendLine(); success = false; } } } } } if (success) { UnityConsole.Info("Generate asset complete."); } else { Debug.LogError(failedMessage.ToString()); } }
private void DeleteMissingSourceAsset(BehaviorControlSetting setting, string[] filePaths) { var exportFolderPath = setting.GetExportFolderPath(); var deleteList = new List <string>(); var existPaths = filePaths.Select(x => ConvertDataPathToAssetPath(setting, x)).ToArray(); var assets = UnityEditorUtility.FindAssetsByType <BehaviorControlAsset>("t:BehaviorControlAsset", new[] { exportFolderPath }).ToArray(); foreach (var asset in assets) { var assetPath = AssetDatabase.GetAssetPath(asset); if (existPaths.Contains(assetPath)) { continue; } deleteList.Add(assetPath); } if (deleteList.Any()) { var builder = new StringBuilder(); builder.AppendLine("Delete missing source assets."); builder.AppendLine(); using (new AssetEditingScope()) { foreach (var item in deleteList) { builder.AppendLine(item); AssetDatabase.DeleteAsset(item); } } Debug.LogWarning(builder.ToString()); AssetDatabase.Refresh(); } }
private Dictionary <string, ImportData> LoadImportData(BehaviorControlSetting setting, FileLoader.Format fileFormat) { var extension = FileLoader.GetFileExtension(fileFormat); if (!Directory.Exists(selectionDirectory)) { return(null); } var files = Directory.EnumerateFiles(selectionDirectory, "*.*", SearchOption.AllDirectories) .Where(x => Path.GetExtension(x) == extension) .Select(x => PathUtility.ConvertPathSeparator(x)) .ToArray(); var dictionary = new Dictionary <string, ImportData>(); foreach (var file in files) { var assetPath = ConvertDataPathToAssetPath(setting, file); var behaviorControlAsset = AssetDatabase.LoadMainAssetAtPath(assetPath) as BehaviorControlAsset; if (behaviorControlAsset != null && behaviorControlAsset.LastUpdate.HasValue) { var fileLastUpdate = File.GetLastWriteTimeUtc(file); var assetLastUpdate = behaviorControlAsset.LastUpdate.Value; if (fileLastUpdate <= assetLastUpdate) { continue; } } var data = FileLoader.LoadFile <ImportData>(file, fileFormat); if (data != null) { dictionary.Add(file, data); } } return(dictionary); }