private int m_EntryTime; // 登場モーション時間 // 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を取得 // 追従目標を指定 SetTarget(); m_State = EnemyC_State_v2.Entry; }
// 接触判定 public void OnTriggerEnter(Collider other) { // 電撃を受けると麻痺 if (other.name == "Cylinder") { m_State = EnemyC_State_v2.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 == EnemyC_State_v2.Entry) { --m_EntryTime; // 通常状態に移行 if (m_EntryTime <= 0) { m_State = EnemyC_State_v2.Normal; } } // 通常状態 else if (m_State == EnemyC_State_v2.Normal) { // プレイヤーに向ける LookAtPlayer(); // プレイヤーに近すぎると後退 if (IsPlayerNear() && m_Target != null) { m_NavMeshAgent.destination = -m_Target.position; } // 攻撃 if (m_AttackCount >= m_AttackInterval) { // プレイヤーが見えると攻撃 if (CanSeePlayer()) { Attack(); } } // 追従目標を変更 if (m_ChangeTargetCount >= m_ChangeTargetInterval) { SetTarget(); } // 攻撃カウンター ++m_AttackCount; // 目標変更カウンター ++m_ChangeTargetCount; } // 被弾した場合 else if (m_State == EnemyC_State_v2.Damage) { // のけぞり時間を加算 ++m_DamageTimeCounter; if (m_DamageTimeCounter >= m_DamageTime) { m_State = EnemyC_State_v2.Normal; } } // 麻痺中の場合 else { // 麻痺時間を加算 ++m_ParalysisCount; if (m_ParalysisCount >= m_ParalysisTime) { m_State = EnemyC_State_v2.Normal; } } } }