//处理寻路 private void HandleSeek(SeekPathCom seekPathCom, SpeedCom speedCom) { //请求寻路 if (seekPathCom.ReqSeek) { Vector2Int curPos = seekPathCom.CurrPos; Vector2Int tarPos = seekPathCom.TargetPos; MapData mapData = TempConfig.GetMapData(seekPathCom.MapPos); //List<Vector2Int> path = AstarHelp.FindPath(curPos, tarPos, mapData.ObstaclePos); //seekPathCom.MovePath = path; TaskHelp.AddTaskTwoParam(seekPathCom, mapData, ExcuteFindPath, FinishFindPath); seekPathCom.ReqSeek = false; } if (seekPathCom.CurrPos.Equals(seekPathCom.TargetPos)) { return; } if (seekPathCom.MovePath == null || seekPathCom.MovePath.Count <= 0) { return; } MoveFollowPath(seekPathCom.Trans, seekPathCom.MovePath, ref seekPathCom.CurrPathIndex, speedCom.MaxSpeed, seekPathCom); //HandleSeekMove(seekPathCom, speedCom, viewCom); }
//处理寻路移动 private void HandleSeekMove(SeekPathCom seekPathCom, SpeedCom speedCom) { if (seekPathCom.MovePath == null || seekPathCom.MovePath.Count < 1) { return; } Vector2Int lastPoint; Vector2Int targrtPoint; //最后一个点 if (seekPathCom.MovePath.Count == 1) { lastPoint = seekPathCom.CurrPos; targrtPoint = seekPathCom.MovePath[0]; } else { lastPoint = seekPathCom.MovePath[0]; targrtPoint = seekPathCom.MovePath[1]; } //走到目标点---->换下一个点 if (Vector2.Distance(new Vector2(seekPathCom.Trans.localPosition.x, seekPathCom.Trans.localPosition.y), targrtPoint) <= 0.01f) { //更新当前所处地图位置 seekPathCom.CurrPos = targrtPoint; //更新目标点 seekPathCom.MovePath.RemoveAt(0); //到达目标点 if (seekPathCom.MovePath.Count < 1) { seekPathCom.MovePath = null; //ECSLocate.ECSLog.LogError("寻路结束》》》》目标点 : ", viewCom.Trans.localPosition); //更新位置 seekPathCom.Trans.localPosition = new Vector3(targrtPoint.x, targrtPoint.y, 0); return; } //最后一个点 if (seekPathCom.MovePath.Count == 1) { lastPoint = seekPathCom.CurrPos; targrtPoint = seekPathCom.MovePath[0]; } else { lastPoint = seekPathCom.MovePath[0]; targrtPoint = seekPathCom.MovePath[1]; } } //移动 float deltaDistance = speedCom.MaxSpeed * Definition.DeltaTime; Vector2 movePos = CalMovePosition(lastPoint, targrtPoint, deltaDistance); seekPathCom.Trans.Translate(movePos); }
protected override void HandleComs(List <BaseCom> comList) { stopwatch.Restart(); SeekPathCom seekPathCom = GetCom <SeekPathCom>(comList[0]); SpeedCom speedCom = GetCom <SpeedCom>(comList[1]); HandleSeek(seekPathCom, speedCom); stopwatch.Stop(); //Debug.Log("寻路系统一次轮询花费>>>>>>" + stopwatch.Elapsed.TotalMilliseconds); }