// 接触判定 public void OnTriggerEnter(Collider other) { // 電撃を受けると麻痺 if (other.name == "Cylinder") { m_State = EnemyC_State_v3.Paralysis; m_ParalysisCount = 0; } // ロケットパンチを受けると… }
private AudioSource m_Fire; // 発砲 // Use this for initialization void Start() { m_Rigidbody = GetComponent <Rigidbody>(); // Rigidbodyを取得 m_NavMeshAgent = GetComponent <NavMeshAgent>(); // NavMeshAgentを取得 m_NavMeshAgent.destination = transform.position; // 登場直後はしばらく移動しない m_Animator = GetComponentInChildren <Animator>(); // Animatorを取得 AudioSource[] m_AudioSources = GetComponents <AudioSource>(); m_Fire = m_AudioSources[0]; // 追従目標を指定 SetTarget(); // 初期位置を指定 m_DestinationIndex = 0; m_State = EnemyC_State_v3.Entry; }
// Update is called once per frame void Update() { // プレイヤーが合体中・分離中でなければ if (GameManager.Instance.m_PlayMode != PlayMode.Combine && GameManager.Instance.m_PlayMode != PlayMode.Release) { // 登場 if (m_State == EnemyC_State_v3.Entry) { m_EntryTime -= Time.deltaTime; // 攻撃状態に移行 if (m_EntryTime <= 0) { m_State = EnemyC_State_v3.Attack; } } // 攻撃状態 else if (m_State == EnemyC_State_v3.Attack) { // プレイヤーに向ける LookAtPlayer(); // 攻撃 if (m_AttackCount >= m_AttackInterval) { // プレイヤーが見えると攻撃 if (IsPlayerInViewingAngle() && IsPlayerInViewingDistance()) { Attack(); } } // 追従目標を変更 if (m_ChangeTargetCount >= m_ChangeTargetInterval) { SetTarget(); } // プレイヤーが接近すると移動 if (IsPlayerNear() && m_ChangePositionCount >= m_ChangePositionInterval) { SetPosition(); // 次の目的地を設定 m_State = EnemyC_State_v3.Move; } // 攻撃カウンター m_AttackCount += Time.deltaTime; // 目標変更カウンター m_ChangeTargetCount += Time.deltaTime; } // 移動状態 else if (m_State == EnemyC_State_v3.Move) { // 移動ポイントに向ける LookAtMovePoint(); // 次の目的地に移動 m_NavMeshAgent.destination = m_Destinations[m_DestinationIndex].position; // 目的地に到達すると、攻撃状態に移行 if (IsArrived()) { m_State = EnemyC_State_v3.Attack; } } // 被弾した場合 else if (m_State == EnemyC_State_v3.Damage) { // のけぞり時間を加算 m_DamageTimeCounter += Time.deltaTime; if (m_DamageTimeCounter >= m_DamageTime) { // 被弾前の状態に戻る if (!IsArrived()) { m_State = EnemyC_State_v3.Move; } else { m_State = EnemyC_State_v3.Attack; } } } // 麻痺中の場合 else { // 麻痺時間を加算 m_ParalysisCount += Time.deltaTime; if (m_ParalysisCount >= m_ParalysisTime) { // 麻痺前の状態に戻る if (!IsArrived()) { m_State = EnemyC_State_v3.Move; } else { m_State = EnemyC_State_v3.Attack; } } } // 移動タイマーを加算 m_ChangePositionCount += Time.deltaTime; } }