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 // 투석기만 좌우가 다르다. // 왼쪽이 1 int dir = (targetPos.x - controller.Position.x < 0) ? 1 : 0; controller.modelTr.rotation = Quaternion.Euler(new Vector3(0, 180 * dir, 0)); if (!sc.target.alive) { sc.Restart(); break; } yield return(null); } }
public override IEnumerator Update() { /* 공격 가능한 시간이 되면 공격하고. * 추격 스테이트로 간다. * * 공격이 불가능 하다면. * 시간을 더하고 추격 스테이트로 간다. */ if (!sc.target.alive) { sc.Restart(); yield break; } controller.modelAnim.Play("idle"); // 공격 가능한 시간이 되면. if (currentTime >= controller.unit.status.attack_speed) { if (checkTime != null) { controller.StopCoroutine(checkTime); checkTime = null; } currentTime = 0f; // 공격을 한다. AttackStart(); // 공격이 끝날때 까지 기다린다. yield return(new WaitUntil(() => attackAnimComplete)); // 공격이 끝나면 다시 시간을 계산한다. checkTime = sc.StartCoroutine(CheckTime()); } // 스테이지를 변경하고 끝낸다. controller.ChangeState(sc.chaseSate); yield break; }