private void OnTriggerEnter(Collider other) { if (!PhotonNetwork.isMasterClient) { return; } int tp = 6; if (other.name.Contains(enemyColor) && other.tag.Equals("Minion")) { AddEnemiesList(other); tp = 3; } else if (other.gameObject.layer.Equals(LayerMask.NameToLayer("Champion"))) { if (other.GetComponent <ChampionBehavior>().Team.Equals(enemyColor)) { AddEnemiesList(other); tp = 5; } } else if (other.tag.Equals("Tower")) { TowerBehaviour t = other.GetComponent <TowerBehaviour>(); if (t.isCanAtkMe) { if (t.Team.Equals(enemyColor)) { AddEnemiesList(other); tp = 4; } } } else if (other.tag.Equals("Suppressor") || other.tag.Equals("Nexus")) { SuppressorBehaviour s = other.GetComponent <SuppressorBehaviour>(); if (s.isCanAtkMe) { if (s.Team.Equals(enemyColor)) { AddEnemiesList(other); tp = 4; } } } if (tp < targetPriority) { TargetSearch(); } }
private void OnEnable() { myteam = PhotonNetwork.player.GetTeam().ToString().ToLower(); Icon = GetComponent <SpriteRenderer>(); MinionRed = Resources.Load <Sprite>("Minimap/MIcon_Red_Minion"); MinionBlue = Resources.Load <Sprite>("Minimap/MIcon_Blue_Minion") as Sprite; TowerRed = Resources.Load <Sprite>("Minimap/MIcon_Red_Tower") as Sprite; TowerBlue = Resources.Load <Sprite>("Minimap/MIcon_Blue_Tower") as Sprite; if (transform.parent.name.Contains("Minion")) { MBehavior = transform.parent.GetComponent <MinionBehavior>(); if (myteam.Equals(MBehavior.team.ToString().ToLower())) { Icon.sprite = MinionBlue; } else { Icon.sprite = MinionRed; } transform.localPosition = new Vector3(0, 200, 0); transform.localRotation = Quaternion.Euler(90, 0, 0); transform.localScale = new Vector3(3, 3, 3); } else if (transform.parent.name.Contains("Tower")) { TBehavior = transform.parent.GetComponent <TowerBehaviour>(); if (myteam.Equals(TBehavior.Team.ToString().ToLower())) { Icon.sprite = TowerBlue; } else { Icon.sprite = TowerRed; } } else if (transform.parent.name.Contains("Nexus") || transform.parent.name.Contains("Suppressor")) { SBehavior = transform.parent.GetComponent <SuppressorBehaviour>(); if (myteam.Equals(SBehavior.Team.ToString().ToLower())) { Icon.sprite = TowerBlue; } else { Icon.sprite = TowerRed; } } }
public void ProgressBarColorChange() { if (suppressorBehaviour == null) { suppressorBehaviour = GetComponent <SuppressorBehaviour>(); } if (PhotonNetwork.player.GetTeam().ToString().Equals(suppressorBehaviour.Team.ToLower())) { NHPBar.Bar.GetComponent <Image>().color = myTeamColor; } else { NHPBar.Bar.GetComponent <Image>().color = enemyTeamColor; } }
/// <summary> /// TriggerEnter한 콜라이더가 있을 때 공격 우선순위를 계산하는 함수 /// </summary> /// <param name="trigCol">TriggerEnter한 콜라이더</param> /// <returns>계산한 우선순위 값을 리턴</returns> private int SetPriority(Collider trigCol) { int tempPriority = 6; if (trigCol.name.Contains(enemyColor) && trigCol.tag.Equals("Minion")) { AddEnemiesList(trigCol, 3); tempPriority = 3; } else if (trigCol.gameObject.layer.Equals(LayerMask.NameToLayer("Champion"))) { if (trigCol.GetComponent <ChampionBehavior>().team.Equals(enemyColor)) { AddEnemiesList(trigCol, 5); tempPriority = 5; } } else if (trigCol.tag.Equals("Tower")) { TowerBehaviour TowerBehav = trigCol.GetComponent <TowerBehaviour>(); if (TowerBehav.isCanAtkMe) { if (TowerBehav.team.Equals(enemyColor)) { AddEnemiesList(trigCol, 4); tempPriority = 4; } } } else if (trigCol.tag.Equals("Suppressor") || trigCol.tag.Equals("Nexus")) { SuppressorBehaviour SupBehav = trigCol.GetComponent <SuppressorBehaviour>(); if (SupBehav.isCanAtkMe) { if (SupBehav.team.Equals(enemyColor)) { AddEnemiesList(trigCol, 4); tempPriority = 4; } } } return(tempPriority); }
/// <summary> /// 공격을 담당하는 코루틴 /// </summary> IEnumerator Attack() { while (!myChampBehav.isDead) { if (!isAtkPause) { bool isCheck = true; if (!isTargetting) { isCheck = false; } else if (atkTargetObj == null) { isCheck = false; } else if (atkTargetObj.Equals(aStarTargetObj)) { isCheck = false; } //타겟이 있다면 공격 if (isCheck) { myChampBehav.transform.DOLookAt(atkTargetObj.transform.position, 0); //공격하는 대상과 피격당하는 대상을 구분하여 처리 if (atkTargetObj.tag.Equals("Minion")) { MakeAsheArrow(); MinionBehavior minBehav = atkTargetObj.GetComponent <MinionBehavior>(); AudioSource minAudio = minBehav.transform.GetChild(minBehav.transform.childCount - 1).GetComponent <AudioSource>(); if (minBehav != null) { int viewID = minBehav.GetComponent <PhotonView>().viewID; myChampBehav.HitRPC(viewID); ChampionSound.instance.IamAttackedSound(minAudio, champName); if (isAshe) { asheSkill.QCountUp(); } minBehav.HitMe(myChampionData.totalStat.AttackDamage, "AD", myChampBehav.gameObject); if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (atkTargetObj.layer.Equals(LayerMask.NameToLayer("Champion"))) { MakeAsheArrow(); ChampionBehavior champBehav = atkTargetObj.GetComponent <ChampionBehavior>(); AudioSource champaudio = champBehav.gameObject.GetComponent <AudioSource>(); if (champBehav != null) { int viewID = champBehav.GetComponent <PhotonView>().viewID; myChampBehav.HitRPC(viewID); ChampionSound.instance.IamAttackedSound(champaudio, champName); if (isAshe) { asheSkill.QCountUp(); } champBehav.HitMe(myChampionData.totalStat.AttackDamage, "AD", myChampBehav.gameObject, myChampBehav.name); if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (atkTargetObj.tag.Equals("Tower")) { MakeAsheArrow(); TowerBehaviour towerBehav = atkTargetObj.GetComponent <TowerBehaviour>(); AudioSource towerAudio = towerBehav.GetComponent <AudioSource>(); if (towerBehav != null) { string key = ""; char[] keyChar = towerBehav.gameObject.name.ToCharArray(); for (int i = 13; i < 16; ++i) { key += keyChar[i]; } myChampBehav.HitRPC(key); ChampionSound.instance.IamAttackedSound(towerAudio, champName); if (isAshe) { asheSkill.QCountUp(); } // 타워를 파괴 시 팀의 cs, 골드, 경험치를 올린다 if (towerBehav.HitMe(myChampionData.totalStat.AttackDamage)) { myChampionData.Kill_CS_Gold_Exp(atkTargetObj.name, 2, atkTargetObj.transform.position); ResetTarget(); } if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (atkTargetObj.tag.Equals("Suppressor")) { MakeAsheArrow(); SuppressorBehaviour supBehav = atkTargetObj.GetComponent <SuppressorBehaviour>(); if (supBehav != null) { string key = ""; char[] keyChar = supBehav.gameObject.name.ToCharArray(); for (int i = 11; i < 14; ++i) { key += keyChar[i]; } myChampBehav.HitRPC(key); if (isAshe) { asheSkill.QCountUp(); } supBehav.HitMe(myChampionData.totalStat.AttackDamage); if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (atkTargetObj.tag.Equals("Nexus")) { MakeAsheArrow(); SuppressorBehaviour supBehav = atkTargetObj.GetComponent <SuppressorBehaviour>(); if (supBehav != null) { string key = ""; char[] keyChar = supBehav.gameObject.name.ToCharArray(); key += keyChar[6]; myChampBehav.HitRPC(key); if (isAshe) { asheSkill.QCountUp(); } supBehav.HitMe(myChampionData.totalStat.AttackDamage); if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (atkTargetObj.layer.Equals(LayerMask.NameToLayer("Monster"))) { MakeAsheArrow(); MonsterBehaviour monBehav = atkTargetObj.GetComponent <MonsterBehaviour>(); if (monBehav != null) { int viewID = monBehav.GetComponent <PhotonView>().viewID; myChampBehav.HitRPC(viewID); if (isAshe) { asheSkill.QCountUp(); } monBehav.HitMe(myChampionData.totalStat.AttackDamage, "AD", myChamp); if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } } } float AtkSpeed = myChampionData.myStat.AttackSpeed * (1 + (myChampionData.totalStat.UP_AttackSpeed * (myChampionData.totalStat.Level - 1) + (myChampionData.totalStat.AttackSpeed - myChampionData.myStat.AttackSpeed)) / 100); //어택 딜레이타임을 1초로 설정 atkDelayTime = 1f / AtkSpeed; yield return(new WaitForSeconds(atkDelayTime)); } }
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(); }
/// <summary> /// 공격을 담당하는 코루틴 /// </summary> IEnumerator Attack() { while (true) { if (!isAtkPause) { bool isCheck = true; if (nowTarget == null) { isCheck = false; } else if (!nowTarget.activeInHierarchy) { isCheck = false; } //타겟이 있다면 공격 if (isCheck) { if (anim.GetBool("walking")) { anim.SetBool("walking", false); } anim.SetTrigger("attack"); Vector3 v = nowTarget.transform.position; v.y = 0; myMinion.transform.DOLookAt(v, 1); //공격하는 대상과 피격당하는 대상을 구분하여 처리 if (nowTarget.tag.Equals("Minion")) { if (myMinion.name.Contains("Melee")) { MinionBehavior minBehav = nowTarget.GetComponent <MinionBehavior>(); if (minBehav != null) { int viewID = minBehav.GetComponent <PhotonView>().viewID; myBehav.HitRPC(viewID); minBehav.HitMe(myBehav.stat.AttackDamage); } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } else if (nowTarget.layer.Equals(LayerMask.NameToLayer("Champion"))) { if (myMinion.name.Contains("Melee")) { ChampionBehavior champBehav = nowTarget.GetComponent <ChampionBehavior>(); if (champBehav != null) { int viewID = champBehav.GetComponent <PhotonView>().viewID; myBehav.HitRPC(viewID); champBehav.HitMe(myBehav.stat.AttackDamage, "AD", myMinion, myMinion.name); } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } else if (nowTarget.tag.Equals("Tower")) { if (myMinion.name.Contains("Melee")) { TowerBehaviour towerBehav = nowTarget.GetComponent <TowerBehaviour>(); if (towerBehav != null) { string key = ""; char[] keyChar = towerBehav.gameObject.name.ToCharArray(); for (int i = 13; i < 16; ++i) { key += keyChar[i]; } myBehav.HitRPC(key); if (towerBehav.HitMe(myBehav.stat.AttackDamage)) { if (enemyColor.Equals("Red")) { TheInGameManager.blueTeamPlayer[0].GetComponent <PhotonView>().RPC("GlobalGold", PhotonTargets.All, "blue", 100); } else { TheInGameManager.redTeamPlayer[0].GetComponent <PhotonView>().RPC("GlobalGold", PhotonTargets.All, "red", 100); } enemiesList.Remove(nowTarget); } } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } else if (nowTarget.tag.Equals("Suppressor") || nowTarget.tag.Equals("Nexus")) { if (myMinion.name.Contains("Melee")) { SuppressorBehaviour supBehav = nowTarget.GetComponent <SuppressorBehaviour>(); if (supBehav != null) { string key = ""; char[] keyChar = supBehav.gameObject.name.ToCharArray(); if (nowTarget.tag.Equals("Nexus")) { key += keyChar[6]; } else { for (int i = 11; i < 14; ++i) { key += keyChar[i]; } } myBehav.HitRPC(key); if (supBehav.HitMe(myBehav.stat.AttackDamage)) { enemiesList.Remove(nowTarget); } } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } } } //어택 딜레이타임을 1초로 설정 atkDelayTime = 1f; yield return(new WaitForSeconds(1)); } }
/// <summary> /// 현재 마우스로 적을 클릭했는지 여부를 확인해주는 함수 /// </summary> /// <param name="hit">클릭 시 Raycast로 얻은 RaycastHit</param> /// <returns>적을 클릭했는지 여부를 리턴</returns> private bool CheckTouchEnemy(RaycastHit hit) { bool isTouchEnemy = false; if (hit.collider.tag.Equals("Minion")) {//미니언과 충돌했을 때 //적팀인 미니언이라면 적과 충돌했음을 체크한다. if (!hit.collider.name.Contains(playerTeam)) { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { isTouchEnemy = true; } } } else if (hit.collider.gameObject.layer.Equals(LayerMask.NameToLayer("Champion"))) {//챔피언과 충돌했을 때 //적팀인 챔피언이라면 적과 충돌했음을 체크한다. if (!hit.collider.gameObject.GetComponent <ChampionBehavior>().team.Equals(playerTeam)) { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { isTouchEnemy = true; } } } else if (hit.collider.tag.Equals("Tower")) {//타워와 충돌했을 때 TowerBehaviour towerBehav = hit.collider.gameObject.GetComponent <TowerBehaviour>(); //적팀인 타워라면 적과 충돌했음을 체크한다. if (towerBehav.isCanAtkMe) { if (!towerBehav.team.Equals(playerTeam)) { isTouchEnemy = true; } } } else if (hit.collider.tag.Equals("Suppressor") || hit.collider.tag.Equals("Nexus")) {//억제기나 넥서스와 충돌했을 때 SuppressorBehaviour supBehav = hit.collider.gameObject.GetComponent <SuppressorBehaviour>(); //적팀이라면 적과 충돌했음을 체크한다. if (supBehav.isCanAtkMe) { if (!supBehav.team.Equals(playerTeam)) { isTouchEnemy = true; } } } else if (hit.collider.gameObject.layer.Equals(LayerMask.NameToLayer("Monster"))) //몬스터와 충돌했다면 적과 충돌했음을 체크한다. { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { isTouchEnemy = true; } } return(isTouchEnemy); }
private void Update() { if (UnityEngine.SceneManagement.SceneManager.GetActiveScene().name.Equals("InGame")) { if (PlayerData.Instance.isDead) { return; } if (Input.GetKeyDown(KeyCode.A)) { atkCommand = !atkCommand; wardCommand = false; } else if (Input.GetKeyDown(KeyCode.Alpha4)) { if (PlayerData.Instance.accessoryItem.Equals(1)) { wardCommand = !wardCommand; if (wardCommand) { if (myChampAtk.wardAmount < 1) { wardCommand = false; atkCommand = false; } } } } else if (Input.GetKeyDown(KeyCode.S)) { myChampAtk.Stop(); } if (Input.GetMouseButtonDown(1)) { soundtimer -= Time.deltaTime; if (soundtimer <= 0) { ChampionSound.instance.WalkSound(myChampName); soundtimer = 5.0f; } //우선 이동만. 나중엔 공격인지 뭔지 그런 것 판단도 해야 할 것. if (atkCommand) { atkCommand = false; } if (wardCommand) { if (myChampAtk.wardAmount > 0) { wardCommand = false; } } Vector3 h = Vector3.zero; GameObject target = null; bool touchGround = false; bool touchEnemy = false; v = Input.mousePosition; r = Camera.main.ScreenPointToRay(v); hits = Physics.RaycastAll(r); foreach (RaycastHit hit in hits) { if (hit.collider.tag.Equals("Terrain")) { h = hit.point; h.y = 1; touchGround = true; if (!fxpool && UnityEngine.SceneManagement.SceneManager.GetActiveScene().name == "InGame") { fxpool = GameObject.FindGameObjectWithTag("MouseFxPool").GetComponent <MouseFxPooling>(); } fxpool.GetPool("Default", h); } else if (hit.collider.tag.Equals("Minion")) { if (!hit.collider.name.Contains(playerTeam)) { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { touchEnemy = true; } } } else if (hit.collider.gameObject.layer.Equals(LayerMask.NameToLayer("Champion"))) { if (!hit.collider.gameObject.GetComponent <ChampionBehavior>().Team.Equals(playerTeam)) { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { touchEnemy = true; } } } else if (hit.collider.tag.Equals("Tower")) { TowerBehaviour t = hit.collider.gameObject.GetComponent <TowerBehaviour>(); if (t.isCanAtkMe) { if (!t.Team.Equals(playerTeam)) { //if (hit.collider.GetComponent<FogOfWarEntity>().isCanTargeting) touchEnemy = true; } } } else if (hit.collider.tag.Equals("Suppressor") || hit.collider.tag.Equals("Nexus")) { SuppressorBehaviour s = hit.collider.gameObject.GetComponent <SuppressorBehaviour>(); if (s.isCanAtkMe) { if (!s.Team.Equals(playerTeam)) { //if (hit.collider.GetComponent<FogOfWarEntity>().isCanTargeting) touchEnemy = true; } } } else if (hit.collider.gameObject.layer.Equals(LayerMask.NameToLayer("Monster"))) { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { touchEnemy = true; } } if (touchEnemy) { target = hit.collider.gameObject; break; } } // 상점 켜져있으면 뒤로 움직이지않게 var shop = GameObject.FindGameObjectWithTag("ShopCanvas"); if (shop != null) { GraphicRaycaster ShopGR = shop.GetComponent <GraphicRaycaster>(); PointerEventData ped = new PointerEventData(null); ped.position = Input.mousePosition; List <RaycastResult> results = new List <RaycastResult>(); ShopGR.Raycast(ped, results); foreach (RaycastResult result in results) { if (result.gameObject.transform.GetComponentInParent <GraphicRaycaster>().Equals(ShopGR)) { touchEnemy = false; touchGround = false; break; } } } // 옵션 켜져있으면 움직이지않게 var optionCanvas = GameObject.FindGameObjectWithTag("OptionCanvas"); if (optionCanvas != null) { GraphicRaycaster OptionGR = optionCanvas.GetComponent <GraphicRaycaster>(); PointerEventData ped = new PointerEventData(null); ped.position = Input.mousePosition; List <RaycastResult> results = new List <RaycastResult>(); OptionGR.Raycast(ped, results); foreach (RaycastResult result in results) { if (result.gameObject.transform.GetComponentInParent <GraphicRaycaster>().Equals(OptionGR)) { touchEnemy = false; touchGround = false; break; } } } if (touchEnemy) { myTarget.transform.position = transform.position; myChampAtk.willAtkAround = false; if (!myChampAtk.isTargetting) { myChampAtk.isTargetting = true; myChampAtk.AtkTargetObj = target; } } else if (touchGround) { //if (MinimapClick.IsPointerOver) // return; myTarget.transform.position = h; myChampAtk.willAtkAround = false; if (myChampAtk.isTargetting) { myChampAtk.isTargetting = false; myChampAtk.AtkTargetObj = null; myChampAtk.TheAIPath.canMove = true; myChampAtk.TheAIPath.canSearch = true; } } } else if (Input.GetMouseButtonDown(0)) { if (atkCommand) { atkCommand = false; Vector3 h = Vector3.zero; GameObject target = null; bool touchGround = false; bool touchEnemy = false; v = Input.mousePosition; r = Camera.main.ScreenPointToRay(v); hits = Physics.RaycastAll(r); foreach (RaycastHit hit in hits) { if (hit.collider.tag.Equals("Terrain")) { h = hit.point; h.y = 1; touchGround = true; fxpool.GetPool("Force", h); } else if (hit.collider.tag.Equals("Minion")) { if (!hit.collider.name.Contains(playerTeam)) { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { touchEnemy = true; } } fxpool.GetPool("Force", h, hit.transform.gameObject); } else if (hit.collider.gameObject.layer.Equals(LayerMask.NameToLayer("Champion"))) { if (!hit.collider.gameObject.GetComponent <ChampionBehavior>().Team.Equals(playerTeam)) { if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { touchEnemy = true; } } fxpool.GetPool("Force", h, hit.transform.gameObject); } else if (hit.collider.tag.Equals("Tower")) { TowerBehaviour t = hit.collider.gameObject.GetComponent <TowerBehaviour>(); if (t.isCanAtkMe) { if (!t.Team.Equals(playerTeam)) { //if (hit.collider.GetComponent<FogOfWarEntity>().isCanTargeting) touchEnemy = true; } } } else if (hit.collider.tag.Equals("Suppressor") || hit.collider.tag.Equals("Nexus")) { SuppressorBehaviour s = hit.collider.gameObject.GetComponent <SuppressorBehaviour>(); if (s.isCanAtkMe) { if (!s.Team.Equals(playerTeam)) { //if (hit.collider.GetComponent<FogOfWarEntity>().isCanTargeting) touchEnemy = true; } } } else if (hit.collider.gameObject.layer.Equals(LayerMask.NameToLayer("Monster"))) { //if (hit.collider.GetComponentInChildren<MonsterBehaviour>().monAtk.isAtking)//정글이 누굴 공격중이다 if (hit.collider.GetComponent <FogOfWarEntity>().isCanTargeting) { touchEnemy = true; } fxpool.GetPool("Force", h, hit.transform.gameObject); } if (touchEnemy) { target = hit.collider.gameObject; break; } } if (touchEnemy) { //myTarget.transform.position = transform.position; myChampAtk.willAtkAround = false; if (!myChampAtk.isTargetting) { myChampAtk.isTargetting = true; myChampAtk.isWarding = false; myChampAtk.AtkTargetObj = target; } } else if (touchGround) {//여기 고치기 myTarget.transform.position = h; myChampAtk.willAtkAround = true; if (myChampAtk.isTargetting) { myChampAtk.isTargetting = false; myChampAtk.isWarding = false; myChampAtk.AtkTargetObj = null; } } } else if (wardCommand) { Vector3 h = Vector3.zero; v = Input.mousePosition; r = Camera.main.ScreenPointToRay(v); hits = Physics.RaycastAll(r); foreach (RaycastHit hit in hits) { if (hit.collider.tag.Equals("Terrain")) { h = hit.point; h.y = 1; bool isNotCollision = true; Collider[] Cols = Physics.OverlapSphere(h, 1f); foreach (Collider a in Cols) { if (a.tag.Equals("WarCollider")) { isNotCollision = false; break; } } if (isNotCollision) { wardCommand = false; myChampAtk.WantBuildWard(h); } } } } } } }
IEnumerator AtkMotion() { while (true) { if (!isAtkPause) { bool check = true; if (!isTargetting) { check = false; } else if (AtkTargetObj == null) { check = false; } else if (AtkTargetObj.Equals(AStarTargetObj)) { check = false; } if (check) { myChampBehav.transform.DOLookAt(AtkTargetObj.transform.position, 0); if (AtkTargetObj.tag.Equals("Minion")) { if (isAshe) { float moveTime = 0.4f; myChampBehav.ArrowRPC(AtkTargetObj.transform.position, moveTime); } MinionBehavior behav = AtkTargetObj.GetComponent <MinionBehavior>(); AudioSource minAudio = behav.transform.GetChild(behav.transform.childCount - 1).GetComponent <AudioSource>(); if (behav != null) { int viewID = behav.GetComponent <PhotonView>().viewID; myChampBehav.HitRPC(viewID); ChampionSound.instance.IamAttackedSound(minAudio, champname); if (isAshe) { asheSkill.qCountUp(); } if (behav.HitMe(myChampionData.totalstat.Attack_Damage, "AD", myChampBehav.gameObject)) { // 미니언쳤는데 죽었으면 cs, 골드 경험치 올려라 myChampionData.Kill_CS_Gold_Exp(AtkTargetObj.name, 1, AtkTargetObj.transform.position); ResetTarget(); } if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } //else if (AtkTargetObj.tag.Equals("Player")) else if (AtkTargetObj.layer.Equals(LayerMask.NameToLayer("Champion"))) {//이 태그대로 할건지 바뀌는지는 모르겠음. 우선 챔피언 공격임. if (isAshe) { float moveTime = 0.4f; myChampBehav.ArrowRPC(AtkTargetObj.transform.position, moveTime); } ChampionBehavior behav = AtkTargetObj.GetComponent <ChampionBehavior>(); AudioSource champaudio = behav.gameObject.GetComponent <AudioSource>(); if (behav != null) { int viewID = behav.GetComponent <PhotonView>().viewID; myChampBehav.HitRPC(viewID); ChampionSound.instance.IamAttackedSound(champaudio, champname); if (isAshe) { asheSkill.qCountUp(); } if (behav.HitMe(myChampionData.totalstat.Attack_Damage, "AD", myChampBehav.gameObject, myChampBehav.name)) { // 유저쳤는데 죽었으면 kill 골드 경험치 올려라 myChampionData.Kill_CS_Gold_Exp(AtkTargetObj.name, 0, AtkTargetObj.transform.position); sysmsg.sendKillmsg(myChampionData.ChampionName, behav.GetComponent <ChampionData>().ChampionName, myChampBehav.Team); ResetTarget(); } if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (AtkTargetObj.tag.Equals("Tower")) { if (isAshe) { float moveTime = 0.4f; myChampBehav.ArrowRPC(AtkTargetObj.transform.position, moveTime); } TowerBehaviour behav = AtkTargetObj.GetComponent <TowerBehaviour>(); AudioSource towerAudio = behav.GetComponent <AudioSource>(); if (behav != null) { string key = ""; char[] keyChar = behav.gameObject.name.ToCharArray(); for (int i = 13; i < 16; ++i) { key += keyChar[i]; } myChampBehav.HitRPC(key); ChampionSound.instance.IamAttackedSound(towerAudio, champname); if (isAshe) { asheSkill.qCountUp(); } if (behav.HitMe(myChampionData.totalstat.Attack_Damage)) { // 타워쳤는데 죽으면 cs 골드 경험치 올려라 myChampionData.Kill_CS_Gold_Exp(AtkTargetObj.name, 2, AtkTargetObj.transform.position); ResetTarget(); } if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (AtkTargetObj.tag.Equals("Suppressor")) { if (isAshe) { float moveTime = 0.4f; myChampBehav.ArrowRPC(AtkTargetObj.transform.position, moveTime); } SuppressorBehaviour behav = AtkTargetObj.GetComponent <SuppressorBehaviour>(); if (behav != null) { string key = ""; char[] keyChar = behav.gameObject.name.ToCharArray(); for (int i = 11; i < 14; ++i) { key += keyChar[i]; } myChampBehav.HitRPC(key); if (isAshe) { asheSkill.qCountUp(); } if (behav.HitMe(myChampionData.totalstat.Attack_Damage)) { // 억제기쳤는데 죽으면 cs 골드 경험치 올려라 myChampionData.Kill_CS_Gold_Exp(AtkTargetObj.name, 2, AtkTargetObj.transform.position); ResetTarget(); } if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (AtkTargetObj.tag.Equals("Nexus")) { if (isAshe) { float moveTime = 0.4f; myChampBehav.ArrowRPC(AtkTargetObj.transform.position, moveTime); } SuppressorBehaviour behav = AtkTargetObj.GetComponent <SuppressorBehaviour>(); if (behav != null) { string key = ""; char[] keyChar = behav.gameObject.name.ToCharArray(); key += keyChar[6]; myChampBehav.HitRPC(key); if (isAshe) { asheSkill.qCountUp(); } if (behav.HitMe(myChampionData.totalstat.Attack_Damage)) { ResetTarget(); } if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } else if (AtkTargetObj.layer.Equals(LayerMask.NameToLayer("Monster"))) { if (isAshe) { float moveTime = 0.4f; myChampBehav.ArrowRPC(AtkTargetObj.transform.position, moveTime); } MonsterBehaviour behav = AtkTargetObj.GetComponent <MonsterBehaviour>(); if (behav != null) { int viewID = behav.GetComponent <PhotonView>().viewID; myChampBehav.HitRPC(viewID); if (isAshe) { asheSkill.qCountUp(); } if (behav.HitMe(myChampionData.totalstat.Attack_Damage, "AD", myChamp)) { // 죽었으면 cs올려라 //myChampionData.Kill_CS_Gold_Exp(AtkTargetObj.name, 3, AtkTargetObj.transform.position); ResetTarget(); } if (!skillKey.Equals("")) { if (--skillKeyNum < 1) { skillKey = ""; } } } } } } float AS = myChampionData.mystat.Attack_Speed * (1 + (myChampionData.totalstat.UP_AttackSpeed * (myChampionData.totalstat.Level - 1) + (myChampionData.totalstat.Attack_Speed - myChampionData.mystat.Attack_Speed)) / 100); atkDelayTime = 1f / AS; yield return(new WaitForSeconds(atkDelayTime)); } }
IEnumerator AtkMotion() { while (true) { if (!isAtkPause) { bool check = true; if (nowTarget == null) { check = false; } else if (!nowTarget.activeInHierarchy) { check = false; } if (check) { if (Anim.GetBool("walking")) { Anim.SetBool("walking", false); } Anim.SetTrigger("attack"); Vector3 v = nowTarget.transform.position; v.y = 0; myMinion.transform.DOLookAt(v, 1); if (nowTarget.tag.Equals("Minion")) { if (myMinion.name.Contains("Melee")) { MinionBehavior behav = nowTarget.GetComponent <MinionBehavior>(); if (behav != null) { int viewID = behav.GetComponent <PhotonView>().viewID; myBehav.HitRPC(viewID); if (behav.HitMe(myBehav.stat.Attack_Damage)) { enemiesList.Remove(nowTarget); } } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } else if (nowTarget.layer.Equals(LayerMask.NameToLayer("Champion"))) { if (myMinion.name.Contains("Melee")) { ChampionBehavior behav = nowTarget.GetComponent <ChampionBehavior>(); if (behav != null) { int viewID = behav.GetComponent <PhotonView>().viewID; myBehav.HitRPC(viewID); if (behav.HitMe(myBehav.stat.Attack_Damage, "AD", myMinion, myMinion.name)) { sysmsg.sendKillmsg("minion", behav.GetComponent <ChampionData>().ChampionName, myBehav.team.ToString()); enemiesList.Remove(nowTarget); } } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } else if (nowTarget.tag.Equals("Tower")) { if (myMinion.name.Contains("Melee")) { TowerBehaviour behav = nowTarget.GetComponent <TowerBehaviour>(); if (behav != null) { string key = ""; char[] keyChar = behav.gameObject.name.ToCharArray(); for (int i = 13; i < 16; ++i) { key += keyChar[i]; } myBehav.HitRPC(key); if (behav.HitMe(myBehav.stat.Attack_Damage)) { if (enemyColor.Equals("Red")) { inGameManager.blueTeamPlayer[0].GetComponent <PhotonView>().RPC("GlobalGold", PhotonTargets.All, "blue", 100); } else { inGameManager.redTeamPlayer[0].GetComponent <PhotonView>().RPC("GlobalGold", PhotonTargets.All, "red", 100); } enemiesList.Remove(nowTarget); } } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } else if (nowTarget.tag.Equals("Suppressor") || nowTarget.tag.Equals("Nexus")) { if (myMinion.name.Contains("Melee")) { SuppressorBehaviour behav = nowTarget.GetComponent <SuppressorBehaviour>(); if (behav != null) { string key = ""; char[] keyChar = behav.gameObject.name.ToCharArray(); if (nowTarget.tag.Equals("Nexus")) { key += keyChar[6]; } else { for (int i = 11; i < 14; ++i) { key += keyChar[i]; } } myBehav.HitRPC(key); if (behav.HitMe(myBehav.stat.Attack_Damage)) { enemiesList.Remove(nowTarget); } } } else if (myMinion.name.Contains("Magician")) { float moveTime = 0.4f; myBehav.ArrowRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } else if (myMinion.name.Contains("Siege")) { float moveTime = 0.4f; myBehav.CannonballRPC(nowTarget.transform.position, moveTime); Invoke("ProjectileAtk", moveTime); } } } } atkDelayTime = 1f; yield return(new WaitForSeconds(1)); } }