protected void NavUpdate() { if (navPathStatus == NavPathStatus.NavPathOrient) { //如果方向不对,先切换到转向状态 if (GetAngleBetween(TargetPos) >= Main.Ins.CombatData.AimDegree) { navPathStatus = NavPathStatus.NavPathIterator; Machine.ChangeState(Machine.FaceToState, TargetPos); UnityEngine.Debug.Log("进入转向状态"); return; } else { navPathStatus = NavPathStatus.NavPathIterator; } } else if (navPathStatus == NavPathStatus.NavPathIterator) { if (wayIndex == Machine.Path.ways.Count - 1) { //最后一个路点 float distance = NavType == NavType.NavFindUnit ? CombatData.AttackRange : CombatData.StopDistance; Vector3 vector = TargetPos; vector.y = 0; if (Vector3.SqrMagnitude(vector - Player.mPos2d) <= distance) { navPathStatus = NavPathStatus.NavPathFinished; UnityEngine.Debug.Log("寻路完毕,进入战斗状态"); Player.controller.Input.AIMove(0, 0); return; } } else { Vector3 vector = TargetPos; vector.y = 0; //不是最后一个路点 if (Vector3.SqrMagnitude(vector - Player.mPos2d) <= CombatData.StopDistance) { wayIndex += 1; TargetPos = Machine.Path.ways[wayIndex].pos; return; } } Player.FaceToTarget(TargetPos); Player.controller.Input.AIMove(0, 1); } }
protected void NavThink() { switch (navPathStatus) { case NavPathStatus.NavPathNone: navPathStatus = NavPathStatus.NavPathCalc; PathHelper.Ins.CalcPath(Machine, positionStart, positionEnd); break; case NavPathStatus.NavPathCalc: //等待寻路线程的处理. if (Machine.Path != null) { navPathStatus = NavPathStatus.NavPathComplete; } break; case NavPathStatus.NavPathComplete: navPathStatus = NavPathStatus.NavPathOrient; if (Machine.Path.ways.Count == 0) { //寻路可直达, wayIndex = 0; TargetPos = positionEnd; } else { wayIndex = 0; TargetPos = Machine.Path.ways[wayIndex].pos; } //Machine.ChangeState(Machine.WaitState); //for (int i = 0; i < Machine.Path.ways.Count; i++) //{ // GameObject obj = new GameObject(string.Format("{0}", i)); // Idevgame.Util.ObjectUtils.Identity(obj); // obj.transform.position = Machine.Path.ways[i].pos; //} break; case NavPathStatus.NavPathInvalid: navPathStatus = NavPathStatus.NavPathIterator; ChangeState(Previous); break; case NavPathStatus.NavPathIterator: //调度过程-从当前位置,到目标位置的寻路过程. break; } }