// 공격 public override void Attack() { TargetEnemy.Damage(AttackDamage); if (!TargetEnemy.isAlive()) { SetIdle(); } // 스킬 카운트 Count++; }
// 탐색 레이더. 나중에 부모클래스로 빼줘야하고 애니메이션 이름 통일 public IEnumerator Rader() { AngleZ = 0.0f; while (true) { // 레이 쏘는 방향 뱅글뱅글 AngleZ += 1440.0f * Time.deltaTime; Detector = (Quaternion.Euler(0.0f, 0.0f, AngleZ) * Vector3.down * Range) + transform.position; Debug.DrawLine(transform.position, Detector, Color.red, 0.1f); hit = Physics2D.Linecast(transform.position, Detector, 1 << LayerMask.NameToLayer("Enemy")); if (hit) { TargetEnemy = (IDamageable)hit.transform.GetComponent(typeof(IDamageable)); // 유효한 타겟인가? if (TargetEnemy.isAlive()) { cStatus = Status.Attack; anm.AnimationName = "heal"; yield break; } else { SetIdle(); } } else { if (cStatus == Status.Attack) { SetIdle(); } } yield return(null); } }
// 콜백함수. 이벤트 발생시 호출됨 void HandleEvent(Spine.TrackEntry trackEntry, Spine.Event e) { // 정확히 타격 판정이 발생하는 부분 if (e.Data.Name == "hit" && !isAttacked) { print("event hitttttt"); Attack(); isAttacked = true; } // 공격 후 if (e.Data.Name == "end attack" && isAttacked) { print("end Attack"); // 적이 아직 사거리 내에 있는지 확인 if (TargetEnemy.isAlive()) { CheckDistance(transform.position, TargetEnemy.GetTransform().position, Range); } isAttacked = false; } }