| .. | ||
| core | ||
| editor | ||
| tools | ||
| utils | ||
| plugin.py | ||
| README.md | ||
导航网格插件
一个功能完整的3D导航网格系统插件,为EG引擎提供基于导航网格的寻路和路径规划功能。
功能特性
核心功能
- 导航网格生成: 支持从3D场景自动生成导航网格
- 路径查找: 基于A*算法的高效寻路
- 可视化编辑: 直观的导航网格编辑界面
- 多边形管理: 导航网格多边形的增删改查
- 路径可视化: 实时显示寻路结果
寻路算法
- A*算法: 经典的启发式搜索算法
- Dijkstra算法: 保证最短路径的搜索算法
- 多种启发式函数: 欀曼哈顿距离、欧几里得距离等
- 路径平滑: 漏斗算法和简单平滑算法
- 多路点路径: 支持经过多个路点的复杂路径规划
- 动态障碍物: 运行时添加和移除障碍物
- 路径缓存: 提高重复路径查找性能
编辑功能
- 可视化编辑: 图形化界面编辑导航网格
- 多种工具: 选择、添加、删除、绘制工具
- 属性调节: 网格大小、代理尺寸等参数调节
- 撤销重做: 编辑历史管理和操作回退
- 网格对齐: 网格对齐功能提高编辑精度
- 自动连接: 自动计算多边形连接关系
性能优化
- 空间哈希: 加速多边形查找
- 对象复用: 减少内存分配
- 批量处理: 提高大量数据处理效率
- LOD支持: 多层次细节支持
高级特性
- 分层寻路: 大场景高效寻路
- 路径复杂度分析: 路径质量评估
- 备选路径: 多条路径选择
- 路径验证: 路径有效性检查
- 统计信息: 详细的性能和使用统计
- 网格分析: 质量分析和优化建议
- 网格优化: 自动优化和简化功能
- 格式支持: 多种文件格式导入导出
使用方法
快捷键操作
- F1: 切换导航网格编辑器显示
- F2: 切换导航网格可见性
- F3: 查找随机路径进行测试
- F4: 清除所有路径可视化
- F5: 从场景生成导航网格
- F6: 验证导航网格完整性
- F7: 优化导航网格
- F8: 显示统计信息
- F9: 分析导航网格质量
- F10: 导出分析报告
- F11: 简化导航网格
- F12: 检测瓶颈区域
GUI界面操作
插件会在屏幕左上角创建控制面板,可以通过按钮直接操作导航网格功能。
编程接口
# 获取插件实例
navmesh_plugin = world.plugin_manager.get_plugin("navigation_mesh")
# 生成导航网格
navmesh_plugin.generate_navmesh_from_scene()
# 从文件加载导航网格
navmesh_plugin.load_navmesh_from_file("path/to/navmesh.json")
# 保存导航网格到文件
navmesh_plugin.save_navmesh_to_file("path/to/navmesh.json")
# 查找路径
start_point = Point3(0, 0, 0)
end_point = Point3(10, 0, 10)
path = navmesh_plugin.find_path(start_point, end_point)
# 检查点是否可行走
is_walkable = navmesh_plugin.is_point_walkable(Point3(5, 0, 5))
# 获取最近的可行走点
closest_point = navmesh_plugin.get_closest_point(Point3(3, 2, 4))
# 添加动态障碍物
obstacle_id = navmesh_plugin.add_dynamic_obstacle(Point3(5, 0, 5), 1.0, 2.0)
# 移除动态障碍物
navmesh_plugin.remove_dynamic_obstacle(obstacle_id)
# 设置导航网格参数
navmesh_plugin.set_navmesh_settings({
'cell_size': 0.3,
'agent_height': 1.8,
'agent_radius': 0.4
})
# 设置寻路算法
navmesh_plugin.set_pathfinder_algorithm('astar') # 或 'dijkstra'
# 查找多路点路径
waypoints = [Point3(0, 0, 0), Point3(5, 0, 5), Point3(10, 0, 10)]
path = navmesh_plugin.find_path_with_waypoints(waypoints)
# 估算路径代价
cost = navmesh_plugin.estimate_path_cost(Point3(0, 0, 0), Point3(10, 0, 10))
# 验证路径有效性
is_valid = navmesh_plugin.validate_path(path)
# 分析路径复杂度
complexity = navmesh_plugin.get_path_complexity(path)
# 查找备选路径
alternative_paths = navmesh_plugin.find_alternative_paths(Point3(0, 0, 0), Point3(10, 0, 10), 3)
# 清空路径缓存
navmesh_plugin.clear_path_cache()
# 重新构建导航网格
navmesh_plugin.rebuild_navmesh()
# 启用空间哈希优化
navmesh_plugin.enable_spatial_hashing(True)
# 设置空间哈希网格大小
navmesh_plugin.set_spatial_hash_cell_size(5.0)
# 导出统计信息
navmesh_plugin.export_statistics("stats.json")
# 导入/导出设置
navmesh_plugin.import_settings("settings.json")
navmesh_plugin.export_settings("settings.json")
# 高级功能
# 分析网格质量
quality_report = navmesh_plugin.analyze_mesh_quality()
# 获取优化建议
suggestions = navmesh_plugin.suggest_optimizations()
# 检测瓶颈区域
bottlenecks = navmesh_plugin.detect_navigation_bottlenecks()
# 生成完整分析报告
report = navmesh_plugin.generate_analysis_report()
# 导出分析报告
navmesh_plugin.export_analysis_report("analysis_report.json")
# 获取网格复杂度评分
complexity_score = navmesh_plugin.get_mesh_complexity_score()
# 推荐网格简化策略
simplification_recommendation = navmesh_plugin.recommend_mesh_simplification()
# 合并相邻多边形
merged_count = navmesh_plugin.merge_adjacent_polygons()
# 简化多边形
simplified_count = navmesh_plugin.simplify_mesh_polygons()
# 移除小多边形
removed_count = navmesh_plugin.remove_small_mesh_polygons()
# 执行完整网格优化
optimization_result = navmesh_plugin.optimize_navigation_mesh('medium')
# 设置优化参数
navmesh_plugin.set_optimization_settings({
'merge_threshold': 0.5,
'simplify_threshold': 0.1,
'min_polygon_area': 0.01
})
# 获取优化参数
optimization_settings = navmesh_plugin.get_optimization_settings()
# 填补网格空隙
filled_gaps = navmesh_plugin.fill_mesh_gaps()
# 平滑边界
smoothed_edges = navmesh_plugin.smooth_mesh_boundaries()
# 平衡多边形大小
balanced_polygons = navmesh_plugin.balance_polygon_sizes()
# 序列化导航网格
serialized_data = navmesh_plugin.serialize_navigation_mesh()
# 反序列化导航网格
success = navmesh_plugin.deserialize_navigation_mesh(serialized_data)
# 保存导航网格(高级选项)
navmesh_plugin.save_navmesh_to_file_advanced("navmesh.json", compress=True, pretty_print=True)
# 加载导航网格(高级选项)
navmesh_plugin.load_navmesh_from_file_advanced("navmesh.json")
# 导出为标准格式
navmesh_plugin.export_to_standard_format("navmesh.obj", "obj")
# 从标准格式导入
navmesh_plugin.import_from_standard_format("navmesh.obj", "obj")
# 获取文件信息
file_info = navmesh_plugin.get_navmesh_file_info("navmesh.json")
# 批量分析多个网格文件
analysis_results = navmesh_plugin.batch_analyze_navmeshes(["navmesh1.json", "navmesh2.json"])
# 比较两个导航网格
comparison_result = navmesh_plugin.compare_navigation_meshes("navmesh1.json", "navmesh2.json")
# 验证网格文件
validation_result = navmesh_plugin.validate_navmesh_file("navmesh.json")
# 优化并保存网格
optimization_result = navmesh_plugin.optimize_and_save_navmesh("input.json", "output.json", "medium")
# 创建优化流水线
pipeline_result = navmesh_plugin.create_optimization_pipeline(['merge', 'simplify', 'remove_small'])
核心组件
导航网格管理器
负责导航网格的加载、生成、管理和查询。
主要功能:
- 多边形数据管理(添加、删除、修改)
- 点位置查询(最近点、可行走性检查)
- 空间查询优化(空间哈希)
- 可视化显示控制
- 动态障碍物管理
- 网格验证和优化
路径查找器
实现基于导航网格的多种寻路算法。
主要功能:
- A*、Dijkstra等多种寻路算法
- 路径平滑和优化
- 动态障碍物避让
- 路径缓存机制
- 性能统计和分析
- 备选路径生成
导航网格编辑器
提供可视化编辑导航网格的功能。
主要功能:
- 多种编辑工具(选择、添加、删除、绘制)
- 实时可视化反馈
- 编辑历史管理(撤销/重做)
- 参数调节界面
- 快捷键支持
- 网格对齐和辅助功能
导航网格工具集
提供导航网格的高级分析和优化功能。
主要功能:
- 网格质量分析
- 性能评估
- 优化建议
- 自动优化
- 格式转换
- 批量处理
数据结构
导航网格多边形
表示导航网格中的一个可行走区域,包含:
- 多边形顶点(任意数量)
- 相邻多边形信息
- 门户点(与邻居的连接点)
- 中心点计算
- 面积和边界框计算
- 点在多边形内判断
- 最近点计算
导航网格节点
用于寻路算法中的节点表示,包含:
- 多边形ID
- 位置信息
- 代价信息(g_cost, h_cost, f_cost)
- 父节点引用
- 门户点入口信息
寻路路径
表示计算出的路径,包含:
- 路径点列表
- 路径长度和复杂度
- 路径有效性验证
性能优化
算法优化
- 高效数据结构: 使用优先队列优化寻路算法
- 启发式函数: 智能的启发式代价计算
- 节点剪枝: 避免重复节点计算
- 路径缓存: 缓存常用路径提高查找速度
- 空间哈希: 加速多边形空间查询
内存管理
- 对象池: 减少对象创建和销毁开销
- 数据压缩: 优化导航网格数据存储
- 批量处理: 提高大量数据处理效率
渲染优化
- LOD支持: 根据距离调整显示细节
- 视锥剔除: 只渲染可见区域
- 批处理: 合并相似的渲染调用
扩展开发
添加新的寻路算法
- 在pathfinder.py中实现新的算法类
- 继承现有寻路器或创建新的寻路器类
- 在插件主文件中集成新的算法
添加新的网格生成方法
- 在navmesh_manager.py中实现新的生成方法
- 添加对应的GUI控制元素
- 在编辑器中添加对应的生成选项
添加新的编辑工具
- 在navmesh_editor.py中创建新的工具类
- 继承NavMeshEditorTool基类
- 实现工具的交互逻辑
- 在编辑器中注册新工具
添加新的分析工具
- 在navmesh_analyzer.py中实现新的分析功能
- 在navmesh_tools.py中集成新工具
- 在插件主文件中暴露新功能接口
故障排除
路径查找失败
- 检查导航网格是否正确生成和加载
- 确认起点和终点在可行走区域内
- 检查多边形连接是否正确
- 验证导航网格完整性(使用F6快捷键)
性能问题
- 使用寻路统计功能分析性能瓶颈
- 调整启发式权重优化搜索效率
- 简化导航网格结构
- 启用空间哈希优化
- 调整最大搜索节点数限制
编辑器无法使用
- 确认GUI系统是否正常工作
- 检查快捷键是否被其他系统占用
- 重新启用插件尝试
- 检查是否有Python异常(查看控制台输出)
网格生成问题
- 检查场景中是否有合适的几何体用于生成
- 调整网格生成参数(网格大小、代理尺寸等)
- 使用测试网格功能验证基本功能
文件操作问题
- 检查文件路径是否正确
- 确认文件权限是否足够
- 验证文件格式是否支持
- 检查磁盘空间是否充足
API参考
Plugin类主要方法
初始化和控制
initialize()- 初始化插件enable()- 启用插件disable()- 禁用插件finalize()- 清理插件资源
导航网格操作
load_navmesh_from_file(filepath)- 从文件加载导航网格save_navmesh_to_file(filepath)- 保存导航网格到文件generate_navmesh_from_scene()- 从场景生成导航网格rebuild_navmesh()- 重新构建导航网格
路径查找
find_path(start_point, end_point)- 查找两点间路径find_path_with_waypoints(waypoints)- 查找经过多个路点的路径find_alternative_paths(start_point, end_point, count)- 查找备选路径
点查询
is_point_walkable(point)- 检查点是否可行走get_closest_point(point)- 获取最近的可行走点
动态障碍物
add_dynamic_obstacle(position, radius, height)- 添加动态障碍物remove_dynamic_obstacle(obstacle_id)- 移除动态障碍物
设置和配置
set_navmesh_settings(settings)- 设置导航网格参数get_navmesh_settings()- 获取导航网格参数set_pathfinder_algorithm(algorithm)- 设置寻路算法get_available_algorithms()- 获取可用算法列表set_pathfinder_settings(settings)- 设置寻路参数get_pathfinder_settings()- 获取寻路参数
性能和统计
show_stats()- 显示统计信息export_statistics(filepath)- 导出统计信息clear_path_cache()- 清空路径缓存
优化和验证
validate_navmesh()- 验证导航网格optimize_navmesh()- 优化导航网格enable_spatial_hashing(enabled)- 启用/禁用空间哈希set_spatial_hash_cell_size(size)- 设置空间哈希网格大小
高级分析功能
analyze_mesh_quality()- 分析网格质量suggest_optimizations()- 提供优化建议analyze_pathfinding_performance(sample_count)- 分析寻路性能detect_navigation_bottlenecks()- 检测瓶颈区域analyze_coverage()- 分析覆盖情况generate_analysis_report()- 生成分析报告export_analysis_report(filepath)- 导出分析报告get_mesh_complexity_score()- 获取网格复杂度评分recommend_mesh_simplification()- 推荐网格简化策略
网格优化功能
merge_adjacent_polygons()- 合并相邻多边形simplify_mesh_polygons()- 简化多边形remove_small_mesh_polygons()- 移除小多边形optimize_navigation_mesh(optimization_level)- 优化导航网格set_optimization_settings(settings)- 设置优化参数get_optimization_settings()- 获取优化参数fill_mesh_gaps()- 填补网格空隙smooth_mesh_boundaries()- 平滑边界balance_polygon_sizes()- 平衡多边形大小
序列化和文件操作
serialize_navigation_mesh()- 序列化导航网格deserialize_navigation_mesh(data_str)- 反序列化导航网格save_navmesh_to_file_advanced(filepath, compress, pretty_print)- 保存网格(高级选项)load_navmesh_from_file_advanced(filepath)- 加载网格(高级选项)export_to_standard_format(filepath, format_type)- 导出为标准格式import_from_standard_format(filepath, format_type)- 从标准格式导入get_navmesh_file_info(filepath)- 获取文件信息batch_analyze_navmeshes(filepaths)- 批量分析网格compare_navigation_meshes(navmesh1_path, navmesh2_path)- 比较网格validate_navmesh_file(filepath)- 验证网格文件optimize_and_save_navmesh(input_filepath, output_filepath, optimization_level)- 优化并保存create_optimization_pipeline(steps)- 创建优化流水线
性能调优建议
寻路性能
- 合理设置启发式权重(通常1.0为最佳)
- 限制最大搜索节点数避免长时间搜索
- 启用路径缓存减少重复计算
- 使用适当的空间查询优化
内存使用
- 及时清理不用的路径缓存
- 控制导航网格复杂度
- 合理设置空间哈希网格大小
渲染性能
- 只在需要时显示导航网格
- 使用LOD减少远处细节
- 批量处理渲染调用
网格优化
- 定期分析网格质量
- 根据建议进行优化
- 平衡网格精度和性能
- 移除不必要的细节
版本信息
- 版本: 1.0.0
- 作者: EG Team
- 发布日期: 2024年
许可证
本插件遵循EG引擎许可证协议。