目录
- 说在前面
- 安装
- 使用
- 可视化
说在前面
- go version:1.20.2 linux/amd64
- 操作系统:wsl2
- detour-go版本:v0.2.0
- github:这里,求star!
安装
- 使用
go mod
安装即可go get github.com/o0olele/detour-go
使用
- 使用场景模型构建
navmesh
- 通过recast navigation demo进行构建;构建完成后点击
Save
保存二进制文件
- 通过在线工具构建;完成后点击
Export as Recast NavMesh
保存二进制文件
- 通过recast navigation demo进行构建;构建完成后点击
- 使用
detour-go
加载二进制navmesh
文件var mesh = loader.LoadTileMesh("./navmesh.bin") if mesh == nil {panic("load mesh failed.") }
- 进行寻路
// 初始化nav mesh query var meshQuery = detour.DtAllocNavMeshQuery() var status = meshQuery.Init(mesh, 2048) if detour.DtStatusFailed(status) {panic("init mesh query failed.") }// 初始化 query filter var meshFilter = detour.DtAllocDtQueryFilter()// 确定寻路起点 var agentPos [3]float32 var agentHalfExtents = [3]float32{1, 0.75, 1} var agentNearestPoly detour.DtPolyRef status = meshQuery.FindNearestPoly(agentPos[:], agentHalfExtents[:], meshFilter, &agentNearestPoly, agentPos[:]) if detour.DtStatusFailed(status) {panic("find closest point failed.") }// 确定寻路终点 var agentTarget = [3]float32{1.1322085857391357, 10.197294235229492, -5.400757312774658} var agentTragetRef detour.DtPolyRef status = meshQuery.FindNearestPoly(agentTarget[:], agentHalfExtents[:], meshFilter, &agentTragetRef, agentTarget[:]) if detour.DtStatusFailed(status) {panic("find agent target closest point failed.") }// 寻路 var path [256]detour.DtPolyRef var pathCount int meshQuery.FindPath(agentNearestPoly, agentTragetRef, agentPos[:], agentTarget[:], meshFilter, path[:], &pathCount, 256)// 详细路径 var straightPath [256 * 3]float32 var straightPathFlags [256]detour.DtStraightPathFlags var straightPathRef [256]detour.DtPolyRef var straightPathCount int meshQuery.FindStraightPath(agentPos[:], agentTarget[:], path[:], pathCount, straightPath[:], straightPathFlags[:], straightPathRef[:], &straightPathCount, 256, 0) fmt.Println(straightPath[:straightPathCount*3])
可视化
- 复制examples/web下的文件
go run main.go
- 在浏览器中访问
http://localhost:9001/public
- 点击
LoadTileMesh
,选择刚刚保存的二进制navmesh文件
- 点击
Add Agent
,添加一个agent
- 鼠标左键选择移动的目标点