public void CalculatePath(RecastPath recastPath) { if (RecastInterface.FindPath(this.MapId, recastPath.StartPos, recastPath.EndPos)) { RecastInterface.Smooth(this.MapId, 2f, 0.5f); { int smoothCount = 0; float[] smooths = RecastInterface.GetPathSmooth(this.MapId, out smoothCount); for (int i = 0; i < smoothCount; ++i) { Vector3 node = new Vector3(smooths[i * 3], smooths[i * 3 + 1], smooths[i * 3 + 2]); recastPath.Results.Add(node); //Log.Info($"路径点:{node}"); } } } }
/// <summary> /// 修改坐标以适配Recast /// </summary> /// <param name="self"></param> public static void AujustSelfContentForRecast(this RecastPath self) { self.StartPos.x = -self.StartPos.x; self.EndPos.x = -self.EndPos.x; }
/// <summary> /// 寻路 /// </summary> public void SearchPath(int mapId, RecastPath recastPath) { GetRecastPathProcessor(mapId).CalculatePath(recastPath); }