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_State = EnemyB_State.Entry; }
// 接触判定 public void OnTriggerEnter(Collider other) { // 電撃を受けると麻痺 if (other.name == "Cylinder") { // 麻痺してない場合、麻痺状態になる if (m_State != EnemyB_State.Paralysis) { m_State = EnemyB_State.Paralysis; } m_ParalysisCount = 0; } // ロケットパンチを受けると… }
// Update is called once per frame void Update() { // プレイヤーが合体中・分離中でなければ if (GameManager.Instance.m_PlayMode != PlayMode.Combine && GameManager.Instance.m_PlayMode != PlayMode.Release) { // 登場モーション if (m_State == EnemyB_State.Entry) { m_EntryTime -= Time.deltaTime; // 通常状態に移行 if (m_EntryTime <= 0) { m_State = EnemyB_State.Normal; } } // 通常状態 else if (m_State == EnemyB_State.Normal) { // プレイヤーに向けて移動 LookAtPlayer(); if (m_Target != null) { m_NavMeshAgent.destination = m_Target.position; m_Animator.SetFloat("Speed", m_NavMeshAgent.velocity.sqrMagnitude); } // プレイヤーが見えると if (m_AttackCount >= m_AttackInterval) { if (IsPlayerInViewingAngle() && IsPlayerInViewingDistance()) { Attack(); } } // 追従目標を変更 if (m_ChangeTargetCount >= m_ChangeTargetInterval) { SetTarget(); } // 攻撃カウンター m_AttackCount += Time.deltaTime; // 目標変更カウンター m_ChangeTargetCount += Time.deltaTime; } // 被弾した場合 else if (m_State == EnemyB_State.Damage) { // のけぞり時間を加算 m_DamageTimeCounter += Time.deltaTime; if (m_DamageTimeCounter >= m_DamageTime) { m_State = EnemyB_State.Normal; } } // 麻痺中の場合 else { // 麻痺時間を加算 m_ParalysisCount += Time.deltaTime; if (m_ParalysisCount >= m_ParalysisTime) { m_State = EnemyB_State.Normal; } } } }