Exemplo n.º 1
0
    // 接触判定
    public void OnTriggerEnter(Collider other)
    {
        // 電撃を受けると麻痺
        if (other.name == "Cylinder")
        {
            m_State          = EnemyC_State_v3.Paralysis;
            m_ParalysisCount = 0;
        }

        // ロケットパンチを受けると…
    }
Exemplo n.º 2
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;
    }
Exemplo n.º 3
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_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;
        }
    }