public override void HitDamage(int _Damage, GameObject attacker) { stateInfo = this.animator.GetCurrentAnimatorStateInfo(0); if (IsAlive) { currentLife -= _Damage; shoutCount += 1; //uiManager.bossHp.fillAmount = maxLife / currentLife; if (currentLife > 0) { for (int i = 0; i < player.Length; i++) { if (player [i] == attacker) { playerToMonsterDamage [i] += _Damage; targetPlayer = player [i]; } } if (targetPlayer != null) { currentDisTance = Vector3.Distance(targetPlayer.transform.position, transform.position); } if (currentDisTance <= RunRange && currentDisTance > attackRange) //원거리 케릭터가 공격시 원거리 공격 { PatternReserveListCleanUp((int)BigBearBossPatternName.BigBearBossOneHandAttack); } if (shoutCount >= 100) //100회 이상 데미지를 받을 경우 { PatternReserveListCleanUp((int)BigBearBossPatternName.BigBearBossRoar); } //hitanimation } else if (currentLife <= 0) { currentLife = 0; if (!stateInfo.IsName("BigBearBossDeath")) { BigBearBossState = BigBearBossPatternName.BigBearBossDeath; BigBearBossPattern((int)BigBearBossState); IsAlive = false; HittedBox.enabled = false; return; } } } }
public void BigBearBossPattern(int bossState) { monsterAttack = false; switch (bossState) { case 0: BigBearBossState = BigBearBossPatternName.BigBearBossIdle; animator.SetInteger("state", 0); break; case 1: BigBearBossState = BigBearBossPatternName.BigBearBossRun; animator.SetInteger("state", 1); break; case 2: BigBearBossState = BigBearBossPatternName.BigBearBossAttack; animator.SetInteger("state", 2); monsterAttack = true; break; case 3: BigBearBossState = BigBearBossPatternName.BigBearBossOneHandAttack; animator.SetInteger("state", 3); monsterAttack = true; break; case 4: BigBearBossState = BigBearBossPatternName.BigBearJumpAttack; animator.SetInteger("state", 4); break; case 5: BigBearBossState = BigBearBossPatternName.BigBearBossRoar; animator.SetInteger("state", 5); break; case 6: BigBearBossState = BigBearBossPatternName.BigBearBossDeath; animator.SetTrigger("BigBearBossDeath"); break; } }
public IEnumerator BossMonsterPatternChange() { while (IsAlive) { if (attackCycle >= 1) { attackCycle = 0; } // if (stateInfo.IsName ("BigBossBearJumpAttack") || stateInfo.IsName ("BigBearBossRoar") || stateInfo.IsName ("BigBearBossWarning")) { // break; // // } else if (targetPlayer != null) { if (currentDisTance < attackRange) { if (patternReserveList [0] != 0) { BigBearBossPattern(patternReserveList [0]); } else if (stateInfo.IsName("BigBearBossIdle")) { BigBearBossPattern(patternReserveList [1]); } // BigBearBossPattern ((int)BigBearBossPatternName.BigBearBossRoar); // //애니메이션 이벤트로 효과를 넣었음 // // BigBearBossPattern ((int)BigBearBossPatternName.BigBearJumpAttack); // //애니메이션 이벤트로 효과를 넣었음 } else if (currentDisTance > RunRange) { BigBearBossState = BigBearBossPatternName.BigBearBossIdle; BigBearBossPattern((int)BigBearBossState); changeDirection(); } else if (currentDisTance <= RunRange && currentDisTance > attackRange) { BigBearBossState = BigBearBossPatternName.BigBearBossRun; BigBearBossPattern((int)BigBearBossState); changeDirection(); // if (stateInfo.IsName ("BigBearBossRun")) { // // //transform.LookAt(player[0].transform.position); // transform.Translate ((player [0].transform.position - transform.position) * moveSpeed * Time.deltaTime, 0);//반대로 걸어 가서 수정 // //transform.position = Vector3.Lerp (transform.position, player [0].transform.position, Time.deltaTime * moveSpeed); // } } if (IsAttack) { for (int i = 0; i < BossMonsterWeapon.Length; i++) { BossMonsterWeapon [i].AttackColliderSizeChange(new Vector3(3.6f, 1f, 1.1f)); } } else if (!IsAttack) { for (int i = 0; i < BossMonsterWeapon.Length; i++) { BossMonsterWeapon [i].AttackColliderSizeChange(new Vector3(0, 0, 0)); } } } else { BigBearBossState = BigBearBossPatternName.BigBearBossIdle; } BigBearBossPattern((int)BigBearBossState); yield return(new WaitForSeconds(0.2f)); } }