void Move() { //방향계산 dir = target.position - this.transform.position; dir.Normalize(); if (dir.x >= 0.9f || dir.x <= -0.9f) { //오른쪽인경우 if (dir.x >= 0) { aniState = ANI_STATE.E_ML; checkRight = true; } else { aniState = ANI_STATE.E_ML; //왼쪽인경우 checkRight = false; } } else { if (dir.z > 0) { //위로 aniState = ANI_STATE.E_MU; } else if (dir.z <= 0) { //아래로 aniState = ANI_STATE.E_MD; } } }
void Update() { // 리지드바디 안 튕기게 if (Rigid.velocity != Vector3.zero) { Rigid.velocity = Vector3.zero; } // 갓모드 토글 if (Input.GetKeyDown(KeyCode.F2)) { GodMode = !GodMode; } // 이동 if (IsBlinked == false && (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D))) { NextState = ANI_STATE.Move; Move(); // 블링크(우클릭) if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(1)) { BlinkUse(); } } else // 기본 { NextState = ANI_STATE.Idle; // 블링크 딜레이 if (IsBlinked) { Blink(); } } // 폭탄 if (Input.GetKeyDown(KeyCode.Q) && IsBomb == false) { if (BombCount > 0) { Bomb(); } } // 애니메이터 PlayAnimator(); // 무적시간 계산 if (InvincibleTimeCount != 0) { Invincible(); } // 피격점 보여줄지 말지 HitPointCheck(); }
// 애니메이터 재생 void PlayAnimator() { // 애니메이션 변경 if (PrevState != NextState) { PrevState = NextState; PlayerAnimator.SetInteger("state", (int)PrevState); } if (PrevState == ANI_STATE.Idle) // 멈춰있는 상태 { switch (Way) { case 8: // ↑ PlayerAnimator.Play("Idle", -1, 0.4f); break; case 9: // ↗ case 7: PlayerAnimator.Play("Idle", -1, 0.8f); break; case 6: // → case 4: PlayerAnimator.Play("Idle", -1, 0.2f); break; case 3: // ↘ case 1: PlayerAnimator.Play("Idle", -1, 0.6f); break; case 2: // ↓ PlayerAnimator.Play("Idle", -1, 0f); break; } } else if (PrevState == ANI_STATE.Move) // 이동이면 방향값 전달 { if (Way == 1 || Way == 4 || Way == 7) { Way += 2; // 오른쪽 보는 값 } PlayerAnimator.SetInteger("way", Way); } }
void SetAttackPattern() { //공격패턴판단(데미지받은것기준)//히트수계산시간 currPatCheck += Time.deltaTime; //패턴1기준 //체력이 50이상일때 if (count != 3) { if (CurrHP > MaxHP * 0.85) { //시간계산을 패턴체크보다 우선적으로함 if (atPat12CurrTime > atPat12Check) { AtPatRand(); } if (currPatCheck < atPat1Check && atPat12CurrTime < atPat12Check) { //데미지축적치이상일때 if (onDamagedCount > CheckPat1Dam) { //부채꼴 BulletSpawner.Instance.bulletState = 1; } else { //직선 BulletSpawner.Instance.bulletState = 0; } } else { onDamagedCount = 0; currPatCheck = 0; } //애니메이션1 aniState = ANI_STATE.E_AP1; } else if (CurrHP <= MaxHP * 0.85 && CurrHP > MaxHP * 0.56) { if (atPat12CurrTime > atPat12Check) { AtPatRand(); } if (currPatCheck < atPat2Check && atPat12CurrTime < atPat12Check) { //데미지축적치이상일때 if (onDamagedCount > CheckPat2Dam) { //원형 BulletSpawner.Instance.bulletState = 2; } else { //부채꼴 BulletSpawner.Instance.bulletState = 1; } } else { onDamagedCount = 0; currPatCheck = 0; } //애니메이션1 aniState = ANI_STATE.E_AP1; } else if (CurrHP <= MaxHP * 0.56 && CurrHP > MaxHP * 0.27) { AtPatRand(); aniState = ANI_STATE.E_AP2; } else if (CurrHP <= MaxHP * 0.27) { //페이즈2갔을때 AtPatRand(); } } else { //총알안뿌려줌 BulletSpawner.Instance.bulletState = 10; if (atPatRand > 50) { GasterSpawner.Instance.patState = 1; GasterSpawner.Instance.spawnTimePat1 = 0.5f; } else { GasterSpawner.Instance.patState = 2; GasterSpawner.Instance.spawnTimePat2 = 0.1f; } } }