public override IEnumerator Update() { if (!sc.target.alive) { sc.Restart(); yield break; } if (checkTime != null) { controller.StopCoroutine(checkTime); checkTime = null; } currentTime = 0; AttackStart(); yield return(new WaitUntil(() => attackAnimComplete)); // 공격이 끝나면 다시 시간을 계산한다. checkTime = sc.StartCoroutine(CheckTime()); sc.ChangeState(sc.chaseSate); yield break; }
public override IEnumerator Update() { if (!sc.target.alive) { sc.Restart(); yield break; } sc.modelAnim.Play("idle"); // 공격 가능한 시간이 되면. if (currentTime >= controller.unit.status.attack_speed) { if (checkTime != null) { controller.StopCoroutine(checkTime); checkTime = null; } // 공격을 한다. AttackStart(); // 공격이 끝날때 까지 기다린다. yield return(new WaitUntil(() => attackAnimComplete)); // 공격이 끝나면 다시 시간을 계산한다. checkTime = sc.StartCoroutine(CheckTime()); } // 스테이지를 변경하고 끝낸다. controller.ChangeState(sc.chaseSate); yield break; }
IEnumerator FollowTarget() { if (!sc.unit.alive) { yield break; } if (!onState) { yield break; } if (!sc.unit.onAi) { yield break; } controller.modelAnim.Play("walk"); while (true) { Vector3 targetPos = sc.target.transform.position; controller.transform.position = Vector3.MoveTowards( controller.Position, targetPos, controller.unit.status.move_speed * Time.deltaTime); // 왼쪽이 0 int dir = (targetPos.x - controller.Position.x < 0) ? 0 : 1; controller.modelTr.rotation = Quaternion.Euler(new Vector3(0, 180 * dir, 0)); if (!sc.target.alive) { sc.Restart(); break; } yield return(null); } }