Пример #1
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_State = EnemyB_State.Entry;
    }
Пример #2
0
    // 接触判定
    public void OnTriggerEnter(Collider other)
    {
        // 電撃を受けると麻痺
        if (other.name == "Cylinder")
        {
            // 麻痺してない場合、麻痺状態になる
            if (m_State != EnemyB_State.Paralysis)
            {
                m_State = EnemyB_State.Paralysis;
            }
            m_ParalysisCount = 0;
        }

        // ロケットパンチを受けると…
    }
Пример #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 == 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;
                }
            }
        }
    }