/// <summary> /// 火球攻撃 /// </summary> IEnumerator IEUpdateFireBreath(int Count) { const float MaxTime = 0.7f; var fire = ResourceManager.Instance.Get <BossFire>(ConstDirectry.DirPrefabsEnemy, ConstActionHitData.ActionBossFire); var plObjs = PlayerManager.instance.PlayersObject; int AlreadyAttacked = 0; Count = Count >= plObjs.Count ? plObjs.Count : Count; for (int i = 0; i < Count; i++) { BossControll.SetState(BossAnimationController.EnemyState.Fire); int plNum = GetRandomPlayer(AlreadyAttacked); yield return(new WaitForSeconds(MaxTime)); var f = Instantiate(fire); f.StartFire(transform.position, plObjs[plNum].transform.position); AlreadyAttacked |= 1 << plNum; yield return(new WaitForSeconds(MaxTime / 2)); } BossControll.SetState(BossAnimationController.EnemyState.Wait); }
/// <summary> /// しっぽ攻撃 /// </summary> IEnumerator IEUpdateTaleAttack() { const float MaxTime = 3f; yield return(new WaitForSeconds(MaxTime)); BossControll.SetState(BossAnimationController.EnemyState.Wait); }
//======================================================================================== // 行動開始系 //======================================================================================== /// <summary> /// 次のエリアへ移動し始める /// </summary> void StartMoveNext(Transform trs) { if (ProduceCort != null) { StopCoroutine(ProduceCort); } ProduceCort = IEUpdateMoveNextArea(trs); StartCoroutine(ProduceCort); BossControll.SetState(BossAnimationController.EnemyState.Jump); }
//======================================================================================== // IEnumerater系 //======================================================================================== /// <summary> /// 次のエリアへ移動する /// </summary> IEnumerator IEUpdateMoveNextArea(Transform trans) { // 位置計算系 Vector3Complession compPos = new Vector3Complession(); compPos.Initialize(transform.position, trans.position); float Height = 5f; // 角度計算系 QuaternionComplession compQt = new QuaternionComplession(); { var startQt = Quaternion.LookRotation(transform.forward); var endQt = Quaternion.LookRotation((City.Instance.transform.position - trans.position).normalized); compQt.Initialize(startQt, endQt); } const float MaxTime = 1.5f; TimeComplession time = new TimeComplession(MaxTime); while (true) { time.TimeUpdate(); if (time.IsEnd) { break; } float rate = (time.Rate); Vector3 pos = compPos.CalcPosition(rate); pos.y = Height * JumpCurve.Evaluate(rate); transform.position = pos; transform.rotation = compQt.Slerp(rate); yield return(null); } transform.position = compPos.CalcPosition(1f); transform.rotation = compQt.Slerp(1f); BossControll.SetState(BossAnimationController.EnemyState.Wait); }
/// <summary> /// しっぽ攻撃開始 /// </summary> void StartTalePushOff() { if (ProduceCort != null) { StopCoroutine(ProduceCort); } ProduceCort = IEUpdateTaleAttack(); StartCoroutine(ProduceCort); // 右か左かチェック if (IsLeftCheckTalePushOff()) { BossControll.SetState(BossAnimationController.EnemyState.LeftTale); } else { BossControll.SetState(BossAnimationController.EnemyState.RightTale); } }