// Use this for initialization void Start() { phase = 0; phase1 = this.gameObject.GetComponent <Phase1>(); phase2 = this.gameObject.GetComponent <Phase2>(); phase3 = this.gameObject.GetComponent <Phase3>(); phase4 = this.gameObject.GetComponent <Phase4>(); phase5 = this.gameObject.GetComponent <Phase5>(); }
private void Start() { if (instance == null) { instance = this; } else { Destroy(gameObject); } }
void Start() { anim = GetComponent <Animator>(); ag = GetComponent <NavMeshAgent>(); p = FindObjectOfType <Player>(); w = GetComponentInChildren <Weapon>(); health = GetComponent <EnemyHealth>(); //バトルはステップに別れています、リストのなかでステップを作る BossPhase phase1 = new Phase1(ag, anim, state, w, p, transform, this); BossPhase phase2 = new Phase2(ag, anim, state, w, p, transform, this); BossPhase phase3 = new Phase3(ag, anim, state, w, p, transform, this); phases.Add(phase1); phases.Add(phase2); phases.Add(phase3); //スポーンポジションを登録する startPos = transform.position; smoke = GetComponentInChildren <ParticleSystem>(); //現在phaseの設定 currentPhase = phases[phaseIndex]; //phaseエントリー currentPhase.EnterState(); wp = GetComponentInChildren <Weapon>(); //スポンサー設定 Transform[] allChildren = GetComponentsInChildren <Transform>(); foreach (var c in allChildren) { if (c.gameObject.name == "KnifeSpawner") { knifeSpawner = c.transform; } else if (c.gameObject.name == "MagicSpawner") { magicSpawner = c.transform; } } //スポーンprefab enemy = enemyToSpawn; }
void Update() { if (BossClass.instance.Health > 600) { switch (currentState) { case Phase1.Intro: if (BossClass.instance.playIntro) { ChangeAnimationState("SlimeBoss_Intro"); if (counter > 0) { counter -= Time.deltaTime; } else { currentState = Phase1.Idle; counter = phase1Idle; } } break; case Phase1.Idle: ChangeAnimationState("SlimeBoss_Idle"); if (counter > 0) { counter -= Time.deltaTime; } else { counter = jumpTime; currentState = Phase1.Jump; } break; case Phase1.Shooting: ChangeAnimationState("SlimeBoss_Idle"); if (shootPhaseBegginBreakCounter > 0) { shootPhaseBegginBreakCounter -= Time.deltaTime; } else { if (counter > 0) { counter -= Time.deltaTime; shootingPhaseBreakBetweenPhaseCounter -= Time.deltaTime; //beggin break; 1 if (shootPhaseBegginBreakCounter < 0) { if (shootingPhaseBreakBetweenPhaseCounter > 0) { if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { foreach (Transform t in shootingFirePoints) { Instantiate(projectile, t.position, t.rotation); } shootCounter = breaksBetweenShoots; } } } else { shootPhaseBegginBreakCounter -= Time.deltaTime; } } else { shootingPhaseBreakBetweenPhaseCounter = shootPhase1Time - shootingPhaseEndBreak; //beggin break shootPhaseBegginBreakCounter = shootPhaseBegginBreak; counter = jumpTime; currentState = Phase1.Jump; } } break; case Phase1.Jump: ChangeAnimationState("SlimeBoss_Jump"); if (counter > 0) { transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); counter -= Time.deltaTime; } else { currentState = Phase1.Landing; counter = landingTime; } break; case Phase1.Landing: if (canShakeCamera) { CameraShaker.ShakeStrong(landingTime, .15f); canShakeCamera = false; } if (dontShoot == false) { foreach (Transform t in landingShootFirePoints) { Instantiate(projectile, t.position, t.rotation); } dontShoot = true; } ChangeAnimationState("SlimeBoss_Landing"); if (counter > 0) { counter -= Time.deltaTime; } else { dontShoot = false; canShakeCamera = true; if (currentJumps == howManyTimesToJump) { currentJumps = 0; counter = shootPhase1Time; currentState = Phase1.Shooting; } else { currentState = Phase1.Jump; counter = jumpTime; currentJumps++; } } break; } } else { if (hasCounterBeenSet == false) { counter = Phase2introTime; hasCounterBeenSet = true; } switch (phase2CurrentState) { case Phase2.Intro: ChangeAnimationState("SlimeBoss_Stage 2 Intro"); if (canShakeCamera) { CameraShaker.ShakeStrong(Phase2introTime, .35f); canShakeCamera = false; } if (counter > 0) { counter -= Time.deltaTime; } else { canShakeCamera = true; activeSpeed = Phase2speed; counter = Phase2Idle; shootCounter = Phase2breaksBetweenShoots; shootingPhaseBreakBetweenPhaseCounter = Phase2shootPhase1Time - Phase2shootingPhaseEndBreak; shootPhaseBegginBreakCounter = Phase2shootPhaseBegginBreak; phase2CurrentState = Phase2.Idle; } break; case Phase2.Idle: ChangeAnimationState("SlimeBoss_Idle Stage 2"); if (counter > 0) { counter -= Time.deltaTime; } else { counter = Phase2jumpTime; phase2CurrentState = Phase2.Jump; } break; case Phase2.Shooting: ChangeAnimationState("SlimeBoss_Idle Stage 2"); //rotate allFirePoints.Rotate(Vector3.forward * speedToRotateAroundSpiral * Time.deltaTime); if (shootPhaseBegginBreakCounter > 0) { shootPhaseBegginBreakCounter -= Time.deltaTime; } else { if (counter > 0) { counter -= Time.deltaTime; shootingPhaseBreakBetweenPhaseCounter -= Time.deltaTime; if (shootPhaseBegginBreakCounter < 0) { //shootingPhaseBreakBetweenPhaseCounter; if (shootingPhaseBreakBetweenPhaseCounter > 0) { if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { foreach (Transform t in Phase2shootingFirePoints) { Instantiate(projectile, t.position, t.rotation); } shootCounter = Phase2breaksBetweenShoots; } } } else { shootingPhaseBreakBetweenPhaseCounter -= Time.deltaTime; } } else { shootingPhaseBreakBetweenPhaseCounter = Phase2shootPhase1Time - Phase2shootingPhaseEndBreak; shootPhaseBegginBreakCounter = Phase2shootPhaseBegginBreak; counter = Phase2jumpTime; allFirePoints.rotation = Quaternion.identity; phase2CurrentState = Phase2.Jump; } } break; case Phase2.Jump: ChangeAnimationState("SlimeBoss_Stage 2 Jump"); if (counter > 0) { transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); counter -= Time.deltaTime; } else { phase2CurrentState = Phase2.Landing; counter = Phase2landingTime; } break; case Phase2.Landing: if (canShakeCamera) { CameraShaker.ShakeStrong(landingTime, .15f); canShakeCamera = false; } if (dontShoot == false) { foreach (Transform t in Phase2landingShootFirePoints) { Instantiate(projectile, t.position, t.rotation); } dontShoot = true; } ChangeAnimationState("SlimeBoss_Landing Stage 2"); if (counter > 0) { counter -= Time.deltaTime; } else { dontShoot = false; canShakeCamera = true; if (currentJumps == Phase2howManyTimesToJump) { currentJumps = 0; counter = Phase2shootPhase1Time; phase2CurrentState = Phase2.Shooting; } else { phase2CurrentState = Phase2.Jump; counter = Phase2jumpTime; currentJumps++; } } break; } } }
void Start() { actualBoss = transform.parent.gameObject.GetComponent <Phase2>(); InvokeRepeating("Spit", 5f, 10f); }
void Update() { if (BossClass.instance.Health > 1000) { switch (currentState) { case Phase1.Intro: if (BossClass.instance.playIntro) { if (counter > 0) { counter -= Time.deltaTime; } else { currentState = Phase1.GatlingGun; counter = gatlingGunTime; } } break; case Phase1.GatlingGun: if (counter > 0) { counter -= Time.deltaTime; activeSpeed = speedWhenGuntlingGun; transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { foreach (Transform t in gatlingGunFirePoints) { Instantiate(gatlingGunBullet, t.position, t.rotation); } shootCounter = gatlingGunShootingBreaks; } } else { currentState = Phase1.Idle; counter = idleTime; } break; case Phase1.Idle: if (counter > 0) { counter -= Time.deltaTime; waitTimeCounter -= Time.deltaTime; if (waitTimeCounter < 0) { if (hasShootCircle == false) { foreach (Transform t in allFirePoints) { Instantiate(gatlingGunBullet, t.position, t.rotation); } hasShootCircle = true; } } } else { waitTimeCounter = waitTimeBeforeShooting; hasShootCircle = false; currentState = Phase1.Dash; counter = dashTime; } break; case Phase1.Dash: if (counter > 0) { counter -= Time.deltaTime; if (dashBreaksCounter > 0) { if (dashCircle == false) { foreach (Transform t in allFirePoints) { Instantiate(bulletRight, t.position, t.rotation); } dashCircle = true; } dashBreaksCounter -= Time.deltaTime; } else { activeSpeed = dashSpeed; if (hasPickedPoint == false) { randomMovePoint = Random.Range(0, dashMovePoints.Length); hasPickedPoint = true; } transform.position = Vector2.MoveTowards(transform.position, dashMovePoints[randomMovePoint].position, activeSpeed * Time.deltaTime); if (Vector2.Distance(transform.position, dashMovePoints[randomMovePoint].position) < 0.1f) { Debug.Log("okay"); dashBreaksCounter = dashBreaks; hasPickedPoint = false; dashCircle = false; } } } else { currentState = Phase1.GatlingGun; counter = gatlingGunTime; } break; } } else { if (hasCounterBeenSet == false) { counter = phase2introTime; hasCounterBeenSet = true; } switch (phase2CurrentState) { case Phase2.Intro: if (counter > 0) { counter -= Time.deltaTime; if (shouldFade) { book.color = new Color(book.color.r, book.color.g, book.color.b, Mathf.MoveTowards(book.color.a, 1f, bookVisibleSpeed * Time.deltaTime)); if (book.color.a == 1f) { shouldFade = false; } } } else { hasPickedPoint = false; dashCircle = false; dashBreaksCounter = phase2DashBreaks; phase2NightShootCounter = nightShootAttackBreaks; counter = phase2NightStartTime; phase2CurrentState = Phase2.NightStart; shouldFade = true; } break; case Phase2.Idle: break; case Phase2.NightStart: if (counter > 0) { counter -= Time.deltaTime; if (shouldFade) { book.color = new Color(book.color.r, book.color.g, book.color.b, Mathf.MoveTowards(book.color.a, 0f, bookVisibleSpeed * Time.deltaTime)); bodySR.color = new Color(bodySR.color.r, bodySR.color.g, bodySR.color.b, Mathf.MoveTowards(bodySR.color.a, 0f, bookVisibleSpeed * Time.deltaTime)); if (bodySR.color.a == 0f) { shouldFade = false; } } } else { collider.enabled = false; shouldFade = true; counter = phase2NightAttackTime; phase2CurrentState = Phase2.NightAttack; } break; case Phase2.NightAttack: if (counter > 0) { counter -= Time.deltaTime; Vector2 tempPos = nightPhaseFirePointLeft.transform.position; tempPos.y = Mathf.MoveTowards(nightPhaseFirePointLeft.transform.position.y, player.transform.position.y, speedToMoveFirePoint * Time.deltaTime); Vector2 tempPosRight = nightPhaseFirePointRight.transform.position; tempPosRight.y = Mathf.MoveTowards(nightPhaseFirePointRight.transform.position.y, player.transform.position.y, speedToMoveFirePoint * Time.deltaTime); nightPhaseFirePointLeft.transform.position = tempPos; nightPhaseFirePointRight.transform.position = tempPosRight; if (phase2NightShootCounter > 0) { phase2NightShootCounter -= Time.deltaTime; } else { Instantiate(bulletRight, nightPhaseFirePointLeft.transform.position, nightPhaseFirePointLeft.transform.rotation); Instantiate(bossBulletLeft, nightPhaseFirePointRight.transform.position, nightPhaseFirePointLeft.transform.rotation); phase2NightShootCounter = nightShootAttackBreaks; } } else { counter = phase2GoVisible; phase2CurrentState = Phase2.GoVisible; } break; case Phase2.GoVisible: if (counter > 0) { collider.enabled = true; counter -= Time.deltaTime; if (shouldFade) { book.color = new Color(book.color.r, book.color.g, book.color.b, Mathf.MoveTowards(book.color.a, 1f, bookVisibleSpeed * Time.deltaTime)); bodySR.color = new Color(bodySR.color.r, bodySR.color.g, bodySR.color.b, Mathf.MoveTowards(bodySR.color.a, 1f, bookVisibleSpeed * Time.deltaTime)); if (bodySR.color.a == 1f) { shouldFade = false; } } } else { counter = phase2DashTime; phase2CurrentState = Phase2.Dash; shouldFade = true; } break; case Phase2.Dash: if (counter > 0) { counter -= Time.deltaTime; if (dashBreaksCounter > 0) { if (dashCircle == false) { foreach (Transform t in allFirePoints) { Instantiate(bulletRight, t.position, t.rotation); } Instantiate(bigBall, transform.position, transform.rotation); dashCircle = true; } dashBreaksCounter -= Time.deltaTime; } else { activeSpeed = phase2DashSpeed; if (hasPickedPoint == false) { randomMovePoint = Random.Range(0, dashMovePoints.Length); hasPickedPoint = true; } transform.position = Vector2.MoveTowards(transform.position, dashMovePoints[randomMovePoint].position, activeSpeed * Time.deltaTime); if (Vector2.Distance(transform.position, dashMovePoints[randomMovePoint].position) < 0.1f) { Debug.Log("okay"); dashBreaksCounter = dashBreaks; hasPickedPoint = false; dashCircle = false; } } } else { phase2CurrentState = Phase2.NightStart; counter = phase2NightStartTime; } break; } } }
// Update is called once per frame void Update() { if (BossClass.instance.Health > 1250) { switch (currentState) { case Phase1.Intro: if (BossClass.instance.playIntro) { ChangeAnimationState("SpookyWood_Intro"); if (counter > 0) { counter -= Time.deltaTime; } else { currentState = Phase1.Stay; counter = stayTime; } } break; case Phase1.Stay: ChangeAnimationState("SpookyWood_Idle"); if (counter > 0) { counter -= Time.deltaTime; } else { currentState = Phase1.ChaseWithBothHandsShooting; counter = chaseWithBothHandsShootingTime; } break; case Phase1.ChaseWithBothHandsShooting: ChangeAnimationState("SpookyWood_Walk"); if (counter > 0) { counter -= Time.deltaTime; transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); leftHand.Rotate(Vector3.forward * rotateSpeedBothHandsPhase1 * Time.deltaTime); rightHand.Rotate(Vector3.back * rotateSpeedBothHandsPhase1 * Time.deltaTime); if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { Instantiate(bulletGoesRightPrefab, leftHand.position, leftHand.rotation); Instantiate(bulletGoesRightPrefab, rightHand.position, rightHand.rotation); shootCounter = breakBetweenShotsBothHandsPhase1; } } else { leftHand.rotation = Quaternion.identity; rightHand.rotation = Quaternion.identity; currentState = Phase1.StayAndShootBombs; counter = stayAndShootBombsTime; shootCounter = breaksBetweenBombsPhase1; } break; case Phase1.StayAndShootBombs: ChangeAnimationState("SpookyWood_Idle"); if (counter > 0) { counter -= Time.deltaTime; if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { Instantiate(bombBullet, transform.position, Quaternion.identity); shootCounter = breaksBetweenBombsPhase1; } } else { shootCounter = breakBetweenShotsBothHandsPhase1; counter = breakTime; currentState = Phase1.Break; } break; case Phase1.SpawnEnemies: ChangeAnimationState("SpookyWood_Walk"); if (spawnersList.Count <= 0 || canSpawnSpawners) { activeSpeed = goingToSpawnPointsSpeed; switch (currentSpawnPoint) { case 0: canSpawnSpawners = true; transform.position = Vector2.MoveTowards(transform.position, spawnPoints[0].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[0].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 1; } break; case 1: canSpawnSpawners = true; transform.position = Vector2.MoveTowards(transform.position, spawnPoints[1].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[1].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 2; } break; case 2: canSpawnSpawners = true; transform.position = Vector2.MoveTowards(transform.position, spawnPoints[2].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[2].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 3; } break; case 3: transform.position = Vector2.MoveTowards(transform.position, spawnPoints[3].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[3].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 0; activeSpeed = speed; currentState = Phase1.Chase; counter = chaseTIme; canSpawnSpawners = false; } break; } } else { currentState = Phase1.Chase; counter = chaseTIme; } break; case Phase1.Break: ChangeAnimationState("SpookyWood_Idle"); if (counter > 0) { counter -= Time.deltaTime; } else { currentState = Phase1.SpawnEnemies; } break; case Phase1.Chase: ChangeAnimationState("SpookyWood_Walk"); if (counter > 0) { counter -= Time.deltaTime; transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); } else { counter = chaseWithBothHandsShootingTime; currentState = Phase1.ChaseWithBothHandsShooting; } break; } } else { if (hasCounterBeenSet == false) { counter = phase2IntroTime; shootCounter = breakBetweenBigBallsPhase2; activeSpeed = phase2Speed; hasCounterBeenSet = true; } switch (currentPhase2State) { case Phase2.Intro: ChangeAnimationState("SpookyWood_Phase2Intro"); if (counter > 0) { counter -= Time.deltaTime; } else { currentPhase2State = Phase2.Stay; counter = phase2StayTime; } break; case Phase2.Stay: ChangeAnimationState("SpookyWood_Phase2Idle"); if (counter > 0) { counter -= Time.deltaTime; } else { currentPhase2State = Phase2.ChaseWithBigBall; counter = phase2ChaseBigBallTime; } break; case Phase2.ChaseWithBigBall: ChangeAnimationState("SpookyWood_Phase2Walk"); transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); if (counter > 0) { counter -= Time.deltaTime; if (hasShootBigBall == false) { Instantiate(bigBallPrefab, transform.position, Quaternion.identity); hasShootBigBall = true; } if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { hasShootBigBall = false; shootCounter = breakBetweenBigBallsPhase2; } } else { hasShootBigBall = false; leftHand.rotation = Quaternion.identity; rightHand.rotation = Quaternion.identity; currentPhase2State = Phase2.StayAndShootBombs; counter = phase2StayAndShootBombsTime; shootCounter = breaksBetweenBombsPhase2; } break; case Phase2.StayAndShootBombs: ChangeAnimationState("SpookyWood_Phase2Idle"); if (counter > 0) { counter -= Time.deltaTime; if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { Instantiate(phase2Bomb, transform.position, Quaternion.identity); shootCounter = breaksBetweenBombsPhase2; } } else { shootCounter = breakBetweenBigBallsPhase2; counter = phase2BreakTime; currentPhase2State = Phase2.Break; } break; case Phase2.SpawnEnemies: ChangeAnimationState("SpookyWood_Phase2Walk"); if (spawnersList.Count <= 0 || canSpawnSpawners) { activeSpeed = phase2GoingToSpawnPointsSpeed; switch (currentSpawnPoint) { case 0: canSpawnSpawners = true; transform.position = Vector2.MoveTowards(transform.position, spawnPoints[0].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[0].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 1; } break; case 1: canSpawnSpawners = true; transform.position = Vector2.MoveTowards(transform.position, spawnPoints[1].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[1].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 2; } break; case 2: canSpawnSpawners = true; transform.position = Vector2.MoveTowards(transform.position, spawnPoints[2].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[2].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 3; } break; case 3: transform.position = Vector2.MoveTowards(transform.position, spawnPoints[3].position, activeSpeed * Time.deltaTime); if (transform.position == spawnPoints[3].position) { Instantiate(spawner, transform.position, Quaternion.identity); currentSpawnPoint = 0; activeSpeed = phase2Speed; currentPhase2State = Phase2.BowAttack; counter = phase2BowAttackTime; canSpawnSpawners = false; shootCounter = breaksBetweenBowAttacksPhase2; } break; } } else { currentPhase2State = Phase2.BowAttack; counter = phase2BowAttackTime; shootCounter = breaksBetweenBowAttacksPhase2; } break; case Phase2.Break: ChangeAnimationState("SpookyWood_Phase2Idle"); if (counter > 0) { counter -= Time.deltaTime; } else { currentPhase2State = Phase2.SpawnEnemies; } break; case Phase2.Chase: ChangeAnimationState("SpookyWood_Phase2Walk"); if (counter > 0) { counter -= Time.deltaTime; transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); } else { counter = phase2ChaseBigBallTime; currentPhase2State = Phase2.ChaseWithBigBall; } break; case Phase2.BowAttack: Vector2 direction = player.transform.position - transform.position; direction.Normalize(); float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; BowAttackPoint.rotation = Quaternion.Euler(0, 0, angle); transform.position = Vector2.MoveTowards(transform.position, player.transform.position, activeSpeed * Time.deltaTime); if (counter > 0) { counter -= Time.deltaTime; if (shootCounter > 0) { shootCounter -= Time.deltaTime; } else { foreach (Transform t in AllBowAttacksFirePoints) { Instantiate(bowAttackBullet, t.position, t.rotation); } shootCounter = breaksBetweenBowAttacksPhase2; } } else { shootCounter = breakBetweenBigBallsPhase2; counter = phase2ChaseBigBallTime; currentPhase2State = Phase2.ChaseWithBigBall; } break; } } }