public void Stop() { willAtkAround = false; isTargetting = false; if (AtkCoroutine != null) { myChampionAnimation.AttackAnimation(false); StopCoroutine(AtkCoroutine); } AtkTargetObj = null; isWarding = false; myChampionData.playerSkill.TheSplatManager.Cancel(); myChampionData.playerSkill.CancelSkill(); StopOnlyMove(); }
private void Update() { //딜레이 타임 확인 CheckAtkDelayTime(); //와드 설치 명령이 있다면 와드를 설치한다 if (isWarding) { InstallWard(); } //논 타겟팅 어택 명령이 있다면 적 리스트에 있는 이 중 가장 가까운 이를 찾는다. if (isWillAtkAround) { float dist = 1000000, nowDist; GameObject tempObj = null; for (int i = 0; i < enemiesList.Count; ++i) { if (enemiesList[i].tag.Equals("Tower")) { TowerBehaviour towerBehav = enemiesList[i].GetComponent <TowerBehaviour>(); if (!towerBehav.isCanAtkMe) { continue; } if (towerBehav.team == myChampBehav.team) { continue; } } else if (enemiesList[i].tag.Equals("Suppressor") || enemiesList[i].tag.Equals("Nexus")) { SuppressorBehaviour supBehav = enemiesList[i].GetComponent <SuppressorBehaviour>(); if (!supBehav.isCanAtkMe) { continue; } if (supBehav.team == myChampBehav.team) { continue; } } else if (enemiesList[i].layer.Equals(LayerMask.NameToLayer("Monster"))) { MonsterBehaviour monBehav = enemiesList[i].GetComponent <MonsterBehaviour>(); if (!monBehav.TheFogEntity.isCanTargeting) { continue; } if (!monBehav.monAtk.isAtking) { continue; } } else if (enemiesList[i].layer.Equals(LayerMask.NameToLayer("Champion"))) { ChampionBehavior champBehav = enemiesList[i].GetComponent <ChampionBehavior>(); if (champBehav.team == myChampBehav.team) { continue; } } nowDist = (enemiesList[i].transform.position - myChamp.transform.position).sqrMagnitude; if (dist > nowDist) { dist = nowDist; tempObj = enemiesList[i]; } // 만약 타겟팅할 적을 찾았다면 타겟팅한다 if (tempObj != null) { atkTargetObj = tempObj; isTargetting = true; isWillAtkAround = false; fxpool.GetPool("Force", tempObj.transform.position, tempObj.transform.gameObject); } } } // 공격할 적이 있는 경우 if (atkTargetObj != null) { if (isTargetting && atkTargetObj.activeInHierarchy) { if (TheAIDest.target != atkTargetObj.transform) { TheAIDest.target = atkTargetObj.transform; } atkTargetPos = atkTargetObj.transform.position; myChampPos = myChamp.transform.position; atkTargetPos.y = 0; myChampPos.y = 0; float atkRevision = 0; // 건물의 반지름에 따라 거리 보정을 넣어준다 if (atkTargetObj.tag.Equals("Tower") && atkRange < 5) { atkRevision = 1f; } else if (atkTargetObj.tag.Equals("Suppressor") && atkRange < 5) { atkRevision = 2.5f; } else if (atkTargetObj.tag.Equals("Nexus") && atkRange < 5) { atkRevision = 7f; } // 공격 반경 밖에 타겟이 있다면 다가간다 if (Vector3.Distance(atkTargetPos, myChampPos) > atkRange + atkRevision) { if (!TheAIPath.canMove) { ToggleMove(true); myChampionAnimation.AttackAnimation(false); } if (atkCoroutine != null) { myChampionAnimation.AttackAnimation(false); StopCoroutine(atkCoroutine); atkCoroutine = null; } } else {// 공격 반경 안에 타겟이 있다면 공격한다 if (!isAtkDelayTime) { if (TheAIPath.canMove) { ToggleMove(false); myChampionAnimation.AttackAnimation(true); } if (atkCoroutine == null) { atkCoroutine = StartCoroutine(Attack()); } } } } else { ResetTarget(); } } else { ResetTarget(); } // 시간이 지난 만큼 와드의 쿨타임을 감소시킨다 CheckMadeWardCooldown(); }