public override void Action(FSMBase fsm) { base.Action(fsm); //如果到达目标点 if (Vector3.Distance(fsm.transform.position, fsm.wapPoints[index].position) <= fsm.patrolArrivalDistance) { //最后一个路点 if (index == fsm.wapPoints.Length - 1) { switch (fsm.patrolMode) { case PatrolMode.Once: fsm.isPatrolComplete = true; //完成巡逻 return; case PatrolMode.PingPong: Array.Reverse(fsm.wapPoints); break; } } //索引增加 index = (index + 1) % fsm.wapPoints.Length; } //移动 fsm.MoveToTarget(fsm.wapPoints[index].position, fsm.patrolSpeed, fsm.patrolArrivalDistance); //旋转 Vector3 lookPos = fsm.wapPoints[index].position; lookPos.y = fsm.transform.position.y; fsm.transform.LookPosition(lookPos, fsm.rotateSpeed); }
public override void ActionState(FSMBase fsm) { base.ActionState(fsm); Debug.DrawLine(fsm.transform.position, fsm.targetTF.position); //fsm.MoveToTarget(fsm.targetTF.position, fsm.status.attackDistance - 0.1f, fsm.runSpeed); fsm.MoveToTarget(fsm.targetTF, fsm.status.attackDistance - 0.1f, fsm.runSpeed); }
public override void Action(FSMBase fsm) { base.Action(fsm); if (fsm.targetTF == null) { return; } fsm.MoveToTarget(fsm.targetTF.position, fsm.moveSpeed, fsm.chStatus.attackDistance); }
private void LoopPatrolling(FSMBase fsm) { if (fsm.wayPoints[index].GetComponent <Collider2D>().OverlapPoint(fsm.transform.position)) { index = (index + 1) % fsm.wayPoints.Length; } fsm.canMove = true; fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed); }
private void PatrolLoop(FSMBase fsm) { //循环 A B C A B C if (Vector3.Distance(fsm.transform.position, fsm.wayPoints[index].position) <= 0.5f) { index = (index + 1) % fsm.wayPoints.Length; } //fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed); fsm.MoveToTarget(fsm.wayPoints[index], 0, fsm.walkSpeed); }
private void OncePatrolling(FSMBase fsm) { if (fsm.wayPoints[index].GetComponent <Collider2D>().OverlapPoint(fsm.transform.position)) { if (index == fsm.wayPoints.Length - 1) { fsm.isPatrolComplete = true; return; } index++; } fsm.canMove = true; fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed); }
private void PatrolOnlyOnce(FSMBase fsm) { int randomIndex; while (true) { randomIndex = UnityEngine.Random.Range(0, fsm.wayPoints.Length); if (currentIndex != randomIndex) { break; } } currentIndex = randomIndex; fsm.MoveToTarget(fsm.wayPoints[currentIndex], 0, fsm.walkSpeed); }
private void PatrolOnce(FSMBase fsm) { if (Vector3.Distance(fsm.transform.position, fsm.wayPoints[index].position) <= 0.5f) { if (index == fsm.wayPoints.Length - 1) { fsm.isPatrolComplete = true; return; } index++; } //fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed); fsm.MoveToTarget(fsm.wayPoints[index], 0, fsm.walkSpeed); }
private void PatrolPingPong(FSMBase fsm) { //—— 往返 A B C B A if (Vector3.Distance(fsm.transform.position, fsm.wayPoints[index].position) <= 0.5f) { if (index == fsm.wayPoints.Length - 1) { //数组反转 Array.Reverse(fsm.wayPoints); index++; } index = (index + 1) % fsm.wayPoints.Length; } //fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed); fsm.MoveToTarget(fsm.wayPoints[index], 0, fsm.walkSpeed); }
public override void ActionState(FSMBase fsm) { base.ActionState(fsm); fsm.canMove = true; fsm.MoveToTarget(fsm.targetTF.position, fsm.attackDistance, fsm.runSpeed); }