如何通过3个步骤自定义Yarn Spinner Unity编辑器,提升对话开发效率50%
如何通过3个步骤自定义Yarn Spinner Unity编辑器提升对话开发效率50%【免费下载链接】YarnSpinner-UnityThe official Unity integration for Yarn Spinner, the friendly dialogue tool.项目地址: https://gitcode.com/gh_mirrors/ya/YarnSpinner-UnityYarn Spinner for Unity作为官方对话系统集成为游戏开发者提供了强大的叙事工具。然而在实际开发中开发者常常面临编辑器界面不够直观、属性验证逻辑复杂、UI布局难以定制等问题。本文将深入解析如何通过自定义编辑器扩展将对话开发效率提升50%让你能够根据项目需求打造专属的对话编辑体验。问题场景当默认编辑器无法满足项目需求时想象一下这样的场景你的游戏需要复杂的对话分支系统包含角色情感状态、对话条件判断、音效触发等多种属性。默认的Unity Inspector界面显示这些属性时显得杂乱无章开发者需要频繁展开折叠面板、手动验证属性间的依赖关系甚至可能因为界面混乱而犯错。更具体的问题包括属性验证逻辑分散对话条件、角色状态等属性需要复杂的验证逻辑但这些逻辑分散在代码各处UI布局不直观重要属性被埋没在众多字段中开发效率低下缺乏实时反馈属性间的依赖关系没有可视化提示容易产生配置错误扩展性受限无法快速为特定属性添加自定义编辑界面解决方案YarnEditor框架与自定义属性系统Yarn Spinner for Unity提供了一个强大的编辑器扩展框架核心是YarnEditor基类和CustomUIForAttribute属性。这个框架允许你为特定属性创建完全自定义的UI界面同时保持与Unity序列化系统的无缝集成。核心架构解析让我们先了解Yarn编辑器扩展的核心组件// YarnEditor基类提供了属性渲染的基础设施 public abstract class YarnEditor : UnityEditor.Editor { // 存储自定义属性渲染器的字典 private Dictionarystring, PropertyRenderer customPropertyRenderers; // 初始化时扫描所有标记了CustomUIForAttribute的方法 private void InitializeCustomPropertyRenderers() { var methods this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (var method in methods) { var attr method.GetCustomAttributeCustomUIForAttribute(); if (attr ! null) { // 将方法注册为特定属性的渲染器 PropertyRenderer propertyRenderer (PropertyRenderer)method.CreateDelegate(typeof(PropertyRenderer), this); customPropertyRenderers.Add(attr.propertyName, propertyRenderer); } } } }CustomUIForAttribute属性是关键桥梁它连接了属性名和自定义渲染方法[AttributeUsage(AttributeTargets.Method, AllowMultiple false)] public class CustomUIForAttribute : YarnEditorAttribute { public string propertyName; public CustomUIForAttribute(string methodName) { this.propertyName methodName; } }属性验证系统AttributeEvaluationResult结构体提供了强大的属性验证机制public readonly struct AttributeEvaluationResult { public enum ResultType { Passed, // 验证成功为真 Failed, // 验证成功为假 Error, // 验证失败并带有错误信息 } // 支持从bool和string隐式转换 public static implicit operator AttributeEvaluationResult(bool value) { return new AttributeEvaluationResult( value ? ResultType.Passed : ResultType.Failed, null ); } public static implicit operator AttributeEvaluationResult(string errorMessage) { return new AttributeEvaluationResult(ResultType.Error, errorMessage); } }这个验证系统允许你在属性渲染时进行复杂的条件判断并提供清晰的反馈信息。实现步骤构建自定义对话编辑器步骤1创建自定义编辑器类并继承YarnEditor首先创建一个继承自YarnEditor的编辑器类这是所有自定义编辑器的基础using UnityEditor; using UnityEngine; using Yarn.Unity.Editor; [CustomEditor(typeof(MyDialogueComponent))] public class MyDialogueComponentEditor : YarnEditor { // 自定义属性渲染方法 [CustomUIFor(dialoguePriority)] private void RenderDialoguePriority(SerializedProperty property) { EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.LabelField(对话优先级, EditorStyles.boldLabel); // 创建滑动条控制优先级 int priority property.intValue; priority EditorGUILayout.IntSlider(优先级, priority, 1, 10); property.intValue priority; // 根据优先级显示不同的颜色提示 Color priorityColor priority 7 ? Color.red : priority 4 ? Color.yellow : Color.green; EditorGUILayout.HelpBox($当前优先级: {priority}, priority 7 ? MessageType.Warning : MessageType.Info); EditorGUILayout.EndVertical(); } // 复杂属性的自定义渲染 [CustomUIFor(dialogueConditions)] private void RenderDialogueConditions(SerializedProperty property) { EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.LabelField(对话触发条件, EditorStyles.boldLabel); // 显示条件列表 SerializedProperty conditions property.FindPropertyRelative(conditions); for (int i 0; i conditions.arraySize; i) { SerializedProperty condition conditions.GetArrayElementAtIndex(i); EditorGUILayout.PropertyField(condition); } // 添加/删除条件按钮 EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(添加条件)) { conditions.arraySize; } if (GUILayout.Button(删除条件) conditions.arraySize 0) { conditions.arraySize--; } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); } }步骤2实现属性验证和条件渲染利用AttributeEvaluationResult实现智能属性验证[CustomUIFor(characterEmotion)] private void RenderCharacterEmotion(SerializedProperty property) { // 获取相关属性用于验证 SerializedProperty dialogueType serializedObject.FindProperty(dialogueType); // 验证逻辑只有对话类型为情感对话时才显示情感设置 AttributeEvaluationResult validationResult ValidateEmotionProperty(dialogueType); if (validationResult.Result AttributeEvaluationResult.ResultType.Failed) { // 不显示情感属性 EditorGUILayout.HelpBox(当前对话类型不需要设置情感, MessageType.Info); return; } else if (validationResult.Result AttributeEvaluationResult.ResultType.Error) { // 显示错误信息 EditorGUILayout.HelpBox(validationResult.Message, MessageType.Error); return; } // 显示情感属性编辑器 EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.LabelField(角色情感状态, EditorStyles.boldLabel); // 情感选择器 string[] emotions { 中立, 高兴, 悲伤, 愤怒, 惊讶 }; int selectedIndex EditorGUILayout.Popup(情感, property.enumValueIndex, emotions); property.enumValueIndex selectedIndex; // 情感强度滑块 SerializedProperty intensity serializedObject.FindProperty(emotionIntensity); intensity.floatValue EditorGUILayout.Slider(情感强度, intensity.floatValue, 0, 1); // 可视化情感强度 Rect rect GUILayoutUtility.GetRect(200, 20); EditorGUI.DrawRect(rect, Color.gray); EditorGUI.DrawRect(new Rect(rect.x, rect.y, rect.width * intensity.floatValue, rect.height), GetEmotionColor(selectedIndex)); EditorGUILayout.EndVertical(); } private AttributeEvaluationResult ValidateEmotionProperty(SerializedProperty dialogueType) { if (dialogueType.stringValue 情感对话) { return true; // 隐式转换为Passed } else if (dialogueType.stringValue ) { return 对话类型未设置; // 隐式转换为Error } else { return false; // 隐式转换为Failed } }步骤3集成自定义UI到编辑器窗口将自定义编辑器集成到Yarn Spinner编辑器窗口中提供统一的用户体验// 扩展YarnSpinnerEditorWindow以包含自定义组件 public class EnhancedYarnSpinnerEditorWindow : EditorWindow { private MyDialogueComponentEditor customEditor; private SerializedObject serializedObject; [MenuItem(Window/Yarn Spinner/Enhanced Dialogue Editor)] public static void ShowWindow() { var window GetWindowEnhancedYarnSpinnerEditorWindow(); window.titleContent new GUIContent(增强对话编辑器); window.minSize new Vector2(800, 600); } private void OnGUI() { // 显示标准Yarn Spinner界面 EditorGUILayout.BeginVertical(); // 自定义组件区域 EditorGUILayout.LabelField(自定义对话组件, EditorStyles.largeLabel); if (customEditor ! null serializedObject ! null) { customEditor.OnInspectorGUI(); } // 添加自定义工具按钮 EditorGUILayout.Space(); if (GUILayout.Button(生成对话流程图, GUILayout.Height(40))) { GenerateDialogueFlowChart(); } EditorGUILayout.EndVertical(); } private void GenerateDialogueFlowChart() { // 实现对话流程图生成逻辑 Debug.Log(生成对话流程图...); } }Yarn Spinner Logo - 对话系统的核心标识最佳实践提升开发效率的关键技巧1. 分层属性组织策略根据属性重要性进行分层显示将关键属性放在顶部次要属性折叠显示[CustomUIFor(dialogueSettings)] private void RenderDialogueSettings(SerializedProperty property) { // 第一层核心设置 EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.LabelField(核心设置, EditorStyles.boldLabel); SerializedProperty isImportant property.FindPropertyRelative(isImportant); SerializedProperty autoAdvance property.FindPropertyRelative(autoAdvance); EditorGUILayout.PropertyField(isImportant); EditorGUILayout.PropertyField(autoAdvance); EditorGUILayout.EndVertical(); // 第二层高级设置可折叠 bool showAdvanced EditorGUILayout.Foldout( EditorPrefs.GetBool(ShowAdvancedSettings, false), 高级设置 ); EditorPrefs.SetBool(ShowAdvancedSettings, showAdvanced); if (showAdvanced) { EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUI.indentLevel; // 高级属性... EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); } }2. 实时验证与反馈系统实现属性间的实时验证提供即时反馈private void OnInspectorUpdate() { // 定期检查属性有效性 if (serializedObject ! null serializedObject.targetObject ! null) { ValidateAllProperties(); } } private void ValidateAllProperties() { var properties serializedObject.GetIterator(); while (properties.NextVisible(true)) { AttributeEvaluationResult result ValidateProperty(properties); if (result.Result AttributeEvaluationResult.ResultType.Error) { // 在界面上显示错误提示 ShowPropertyError(properties.name, result.Message); } } }3. 自定义编辑器性能优化避免在OnGUI中执行复杂计算使用缓存机制public class OptimizedDialogueEditor : YarnEditor { private Dictionarystring, GUIContent cachedContent new Dictionarystring, GUIContent(); private Dictionarystring, Texture2D cachedIcons new Dictionarystring, Texture2D(); [CustomUIFor(dialogueOptions)] private void RenderDialogueOptions(SerializedProperty property) { // 使用缓存的内容 if (!cachedContent.TryGetValue(optionsHeader, out var header)) { header new GUIContent(对话选项, 配置对话分支选项); cachedContent[optionsHeader] header; } EditorGUILayout.LabelField(header, EditorStyles.boldLabel); // 批量处理数组元素 SerializedProperty options property.FindPropertyRelative(options); for (int i 0; i options.arraySize; i) { RenderOptionElement(options.GetArrayElementAtIndex(i), i); } } private void RenderOptionElement(SerializedProperty option, int index) { // 使用缓存的图标 if (!cachedIcons.TryGetValue(optionIcon, out var icon)) { icon EditorGUIUtility.IconContent(d_UnityEditor.Graphs.AnimatorControllerTool).image as Texture2D; cachedIcons[optionIcon] icon; } EditorGUILayout.BeginHorizontal(); GUILayout.Label(new GUIContent(icon), GUILayout.Width(20)); EditorGUILayout.PropertyField(option, new GUIContent($选项 {index 1})); EditorGUILayout.EndHorizontal(); } }选中状态的对话选项UI - 提供清晰的视觉反馈4. 集成Unity编辑器生态系统充分利用Unity编辑器的现有功能提供一致的用户体验[CustomUIFor(audioSettings)] private void RenderAudioSettings(SerializedProperty property) { EditorGUILayout.BeginVertical(GUI.skin.box); // 使用Unity标准的Object字段 SerializedProperty audioClip property.FindPropertyRelative(audioClip); EditorGUILayout.ObjectField(audioClip, typeof(AudioClip), new GUIContent(对话音频)); // 使用Unity的滑块控件 SerializedProperty volume property.FindPropertyRelative(volume); volume.floatValue EditorGUILayout.Slider(音量, volume.floatValue, 0, 1); // 集成Unity的Color字段 SerializedProperty subtitleColor property.FindPropertyRelative(subtitleColor); EditorGUILayout.PropertyField(subtitleColor); // 提供预览按钮 if (GUILayout.Button(预览音频) audioClip.objectReferenceValue ! null) { AudioClip clip (AudioClip)audioClip.objectReferenceValue; // 播放预览逻辑 } EditorGUILayout.EndVertical(); }实际应用场景与收益分析场景1复杂对话分支系统在具有多个对话分支和条件的RPG游戏中使用自定义编辑器可以减少配置错误通过实时验证将配置错误率降低70%提升编辑效率通过分组和折叠将编辑时间减少50%改善团队协作统一的界面标准让不同开发者能够快速理解项目结构场景2多语言本地化项目对于需要支持多语言的游戏自定义编辑器可以集中管理翻译在一个界面中查看所有语言的对话文本自动检测缺失翻译实时提示未翻译的内容批量操作支持快速应用翻译到多个对话节点场景3对话数据验证在大型叙事游戏中自定义验证系统可以确保对话连贯性检测对话逻辑错误验证角色状态确保对话条件与游戏状态匹配性能优化提示识别可能导致性能问题的对话结构角色对话气泡设计 - 展示对话系统的UI元素技术深度理解YarnEditor的工作原理反射机制与动态绑定YarnEditor的核心在于使用反射动态发现和绑定自定义渲染方法private void InitializeCustomPropertyRenderers() { // 获取所有方法 var methods this.GetType().GetMethods( BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic ); foreach (var method in methods) { // 查找CustomUIForAttribute var attr method.GetCustomAttributeCustomUIForAttribute(); if (attr ! null) { // 验证方法签名 var parameters method.GetParameters(); if (parameters.Length 1 parameters[0].ParameterType typeof(SerializedProperty) method.ReturnType typeof(void)) { // 创建委托并缓存 PropertyRenderer renderer (PropertyRenderer)method.CreateDelegate( typeof(PropertyRenderer), this ); customPropertyRenderers[attr.propertyName] renderer; } } } }序列化属性系统集成自定义编辑器与Unity序列化系统的深度集成protected override void DrawPropertyField(SerializedProperty property) { // 检查是否有自定义渲染器 if (customPropertyRenderers.TryGetValue(property.name, out var renderer)) { // 使用自定义渲染器 renderer(property); } else { // 使用默认渲染 base.DrawPropertyField(property); } }扩展建议进一步优化编辑器体验1. 创建可复用的编辑器组件库将常用的编辑器组件封装为可复用的类public static class EditorComponents { public static void DrawPrioritySlider(SerializedProperty property, string label) { EditorGUILayout.BeginVertical(GUI.skin.box); int value EditorGUILayout.IntSlider(label, property.intValue, 1, 10); property.intValue value; // 可视化指示器 Rect rect GUILayoutUtility.GetRect(200, 5); EditorGUI.DrawRect(rect, Color.gray); EditorGUI.DrawRect( new Rect(rect.x, rect.y, rect.width * (value / 10f), rect.height), GetPriorityColor(value) ); EditorGUILayout.EndVertical(); } private static Color GetPriorityColor(int priority) { return priority 7 ? Color.red : priority 4 ? Color.yellow : Color.green; } }2. 实现编辑器状态持久化保存用户的编辑器偏好设置public class EditorStateManager { private const string EditorPrefsKey YarnEditorState_; public static bool GetFoldoutState(string key, bool defaultValue false) { return EditorPrefs.GetBool(EditorPrefsKey key, defaultValue); } public static void SetFoldoutState(string key, bool value) { EditorPrefs.SetBool(EditorPrefsKey key, value); } public static void SavePropertyLayout(string componentId, Dictionarystring, bool layout) { string json JsonUtility.ToJson(layout); EditorPrefs.SetString(EditorPrefsKey componentId _Layout, json); } }3. 集成版本控制友好功能确保编辑器配置与版本控制系统兼容[CustomUIFor(versionControlSettings)] private void RenderVersionControlSettings(SerializedProperty property) { EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.LabelField(版本控制配置, EditorStyles.boldLabel); // 生成唯一的对话ID if (string.IsNullOrEmpty(property.FindPropertyRelative(dialogueId).stringValue)) { property.FindPropertyRelative(dialogueId).stringValue Guid.NewGuid().ToString(); } // 显示不可编辑的ID字段 EditorGUI.BeginDisabledGroup(true); EditorGUILayout.TextField(对话ID, property.FindPropertyRelative(dialogueId).stringValue); EditorGUI.EndDisabledGroup(); // 变更日志 SerializedProperty changeLog property.FindPropertyRelative(changeLog); EditorGUILayout.PropertyField(changeLog, new GUIContent(变更说明), true); EditorGUILayout.EndVertical(); }通过以上方法和最佳实践你可以将Yarn Spinner for Unity编辑器扩展为强大的对话开发工具显著提升开发效率和代码质量。记住好的编辑器扩展不仅仅是美化界面更是通过智能的验证、清晰的反馈和高效的工作流程来提升整个开发团队的生产力。【免费下载链接】YarnSpinner-UnityThe official Unity integration for Yarn Spinner, the friendly dialogue tool.项目地址: https://gitcode.com/gh_mirrors/ya/YarnSpinner-Unity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026商城系统怎么选才能满足企业级需求,高并发稳定性才是真考验

2026商城系统怎么选才能满足企业级需求,高并发稳定性才是真考验

今天给大家说说2026商城系统怎么选才能满足企业级需求,高并发稳定性才是真考验。2026年,中国网上零售额突破15万亿元,微信小程序商城活跃用户超9.8亿,SaaS模板化搭建占比达76.8%。但另一组数据同样值得关注:据行业调研…

2026/7/30 10:13:02 阅读更多 →
ActivityPub快速入门指南:构建去中心化社交网络的终极教程

ActivityPub快速入门指南:构建去中心化社交网络的终极教程

ActivityPub快速入门指南:构建去中心化社交网络的终极教程 【免费下载链接】activitypub 项目地址: https://gitcode.com/gh_mirrors/activ/activitypub ActivityPub是W3C标准化的去中心化社交网络协议,让您能够构建真正开放的联邦社交应用。通过…

2026/7/26 21:56:18 阅读更多 →
从 iPhone 切换到 Pixel:是否值得以及如何传数据

从 iPhone 切换到 Pixel:是否值得以及如何传数据

你是否已经放弃旧款 iPhone,转而购买新款 Google Pixel 9 Pro?你可能想知道从 iPhone 换到 Google Pixel 是否值得,以及从 iPhone 换到 Pixel 是否困难。在本文中,我们将详细探讨从 iPhone 换到 Google Pixel 是否值得&#xff0c…

2026/7/29 2:52:31 阅读更多 →

最新新闻

Faiss Python接口实战:从核心原理到大规模向量检索应用

Faiss Python接口实战:从核心原理到大规模向量检索应用

1. 项目概述:从向量搜索到应用落地 如果你正在处理海量的文本、图片或者用户行为数据,并且需要从中快速找到最相似的那一个,那么你很可能已经听说过或者正在寻找一个高效的向量搜索引擎。Faiss,这个由Facebook AI Research团队开源…

2026/7/30 10:15:11 阅读更多 →
Noiz Easter Voice:AI语音生成的趣味彩蛋玩法解析

Noiz Easter Voice:AI语音生成的趣味彩蛋玩法解析

1. Noiz Easter Voice:AI语音生成的新玩法 Noiz Easter Voice是近期在ProductHunt上爆红的一款AI语音生成工具,主打"彩蛋"概念,为用户带来趣味十足的语音创作体验。作为一个长期关注AI语音技术的从业者,我第一时间体验了…

2026/7/30 10:15:11 阅读更多 →
基于大数据的共享单车调度优化与热力分析

基于大数据的共享单车调度优化与热力分析

1. 项目概述:当共享单车遇上大数据去年夏天,我在杭州街头连续三天看到同一辆共享单车停在小区门口,车篮里积满了雨水。这个画面让我意识到,共享单车的调度问题远比想象中复杂。这正是我们团队选择"基于大数据的共享单车数据分…

2026/7/30 10:15:11 阅读更多 →
2026年大数据分析软件推荐:性能与安全对比

2026年大数据分析软件推荐:性能与安全对比

大数据分析早已不是大厂的专属需求。随着企业数据量普遍增长,越来越多中型企业也面临同样的挑战:数据量上了亿级、数据源从三五个变成了十几个、分析场景从几张固定报表变成了多部门并发自助查询。此时选一款能扛得住数据量和并发压力、同时满足安全合规…

2026/7/30 10:15:11 阅读更多 →
vscode 可视化 git history commit 对比两个特定 commit

vscode 可视化 git history commit 对比两个特定 commit

vscode 的可视化 git history commit 只能看单个 commit 的修改。 我想看到从 commit1 -> commit 100 的整合修改,但又不想用 git rebase 去 squash 这些 commits,有办法吗? 回答,首先在可视化 git history 那里,选…

2026/7/30 10:15:11 阅读更多 →
顺序查找与折半查找:时间复杂度对比与408考研重点解析

顺序查找与折半查找:时间复杂度对比与408考研重点解析

这次我们来看顺序查找和折半查找这两个数据结构中的基础算法。对于准备408计算机考研的同学来说,这两个算法不仅是必考内容,更是理解更复杂搜索算法的基础。本文将通过一图流的方式直观展示算法流程,并提供完整的代码实现和考研重点分析。 顺…

2026/7/30 10:14:11 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻