Esempio n. 1
0
 // Use this for initialization
 void Start()
 {
    
     state = Enemy2State.Idle;
     player = GameObject.FindGameObjectWithTag("Player");
     playerController = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>();
 }
Esempio n. 2
0
    // 攻撃
    void Attack()
    {
        m_State = Enemy2State.Attack;
        var bulletInstance = GameObject.Instantiate(m_Bullet, m_Muzzle.position, m_Muzzle.rotation, m_BulletParent);

        bulletInstance.GetComponent <Rigidbody>().AddForce(bulletInstance.transform.forward * m_BulletPower);
        Destroy(bulletInstance, 5);
        m_AttackCount = 0;
    }
Esempio n. 3
0
    // Use this for initialization
    void Start()
    {
        m_Rigidbody         = GetComponent <Rigidbody>();
        m_Agent             = GetComponent <NavMeshAgent>();
        m_Agent.destination = new Vector3(0.0f, 0.0f, 0.0f);

        // 追従目標を指定
        SetTarget();
        m_State       = Enemy2State.Attack;
        m_AttackCount = 0;
    }
Esempio n. 4
0
 void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.tag == "PlayerProjectile")
     {
         Instantiate(enemyExplosion, transform.position, transform.rotation);
         Destroy(other.gameObject);
         state = Enemy2State.Die;
         Destroy(this.gameObject, 0.8f);
     }
     if (other.gameObject.tag == "Grenade")
     {
         Instantiate(grenadeExplosionPrefab, transform.position, transform.rotation);
         this.transform.position += transform.up * 6.5f * Time.deltaTime;
         state = Enemy2State.GrenadeDie;
         Destroy(this.gameObject, 1.2f);
     }
 }
Esempio n. 5
0
    void FixedUpdate()
    {
        Vector3    direction = (player.transform.position - this.transform.position).normalized;
        Ray        ray       = new Ray(this.transform.position, direction);
        RaycastHit hitinfo;
        bool       isPlayer = Physics.Raycast(ray, out hitinfo, 0.5f);

        if (isPlayer)
        {
            state = Enemy2State.Throw;
            if (playerController != null && playerController.Projectile && transform.localScale.x == -player.transform.localScale.x)
            {
                state = Enemy2State.Die;
                Instantiate(enemyExplosion, this.transform.position, Quaternion.identity);
                Destroy(this.gameObject, 0.5f);
            }
            isPlayer = false;
        }
        //Debug.DrawLine(transform.position, ray.direction, Color.red, 1);
    }
Esempio n. 6
0
    // Update is called once per frame
    void Update()
    {
        // 一定間隔で追従目標を変更
        if (m_ChangeTargetCount >= m_ChangeTargetInterval)
        {
            SetTarget();
        }

        // 目標との距離を取得
        if (m_Target == null)
        {
            return;
        }
        float m_Distance = Vector3.Distance(transform.position, m_Target.position);

        // 目標が近すぎると後退
        if (m_Distance < m_MinRange)
        {
            m_State = Enemy2State.Backward;
        }
        // 目標が遠すぎると前進
        else if (m_Distance > m_MaxRange)
        {
            m_State = Enemy2State.Forward;
        }
        // 目標が射程距離内に居れば攻撃
        else
        {
            if (m_AttackCount >= m_AttackInterval && GameManager.Instance.m_PlayMode != PlayMode.Combine && GameManager.Instance.m_PlayMode != PlayMode.Release)
            {
                Attack();
            }
        }

        // 目標変更カウンター
        ++m_ChangeTargetCount;

        // 攻撃カウンター
        ++m_AttackCount;
    }
Esempio n. 7
0
    // Update is called once per frame
    void Update()
    {

        if (transform.position.x > player.transform.position.x)
        {
            transform.localScale = new Vector3(1, 1, 1);

        }
        else
        {
            transform.localScale = new Vector3(-1, 1, 1);

        }
        mtime += Time.deltaTime;
        switch (state)
        {
             
            case Enemy2State.Idle:
                if (mtime > 0.8f)
                {
                    if (Mathf.Abs(transform.position.x - transform.position.x) < 3.5f) {
                        state = Enemy2State.Throw;
                    }
                    
                }
                Enemy2Idle.SetActive(true);
                Enemy2Die.SetActive(false);
                Enemy2GrenadeDie.SetActive(false);
                Enemy2Throw.SetActive(false);
                break;
            case Enemy2State.Die: 
                if (mtime > 1.5f)
                {
                    AudioSource.PlayClipAtPoint(enemyDie, new Vector3(transform.position.x,
                  transform.position.y, transform.position.z));
                    mtime = 0;
                }
                Enemy2Idle.SetActive(false);
                Enemy2Die.SetActive(true);
                Enemy2GrenadeDie.SetActive(false);
                Enemy2Throw.SetActive(false);
                if (Enemy2Die != null) {
                    Destroy(this.gameObject,1f);
                }
                break;
            case Enemy2State.GrenadeDie:
                if (mtime > 1.5f) {
                    AudioSource.PlayClipAtPoint(enemyDie, new Vector3(transform.position.x,
                  transform.position.y, transform.position.z));
                    mtime = 0;
                }
               
                Enemy2Idle.SetActive(false);
                Enemy2Die.SetActive(false);
                Enemy2GrenadeDie.SetActive(true);
                Enemy2Throw.SetActive(false);
                if (Enemy2Throw != null)
                {
                    Destroy(this.gameObject, 1f);
                }
                break;
            case Enemy2State.Throw:
                Enemy2Idle.SetActive(false);
                Enemy2Die.SetActive(false);
                Enemy2GrenadeDie.SetActive(false);
                Enemy2Throw.SetActive(true);
                timer -= Time.deltaTime;
                if (timer < 0 && Mathf.Abs(transform.position.x -player.transform.position.x) < 3.5f)
                {
                    bomb = Instantiate(bombPrefab, this.transform.position, this.transform.rotation) as GameObject;
                    if ((!float.IsNaN(BallisticVel(player.transform, bomb.transform).x)) &&
                    (!float.IsNaN(BallisticVel(player.transform, bomb.transform).y)) &&
                    (!float.IsNaN(BallisticVel(player.transform, bomb.transform).z)))
                    bomb.rigidbody.velocity =1.1f*BallisticVel(player.transform,bomb.transform);
                    timer = 0.5f;
                    Destroy(bomb, 5);
                }
                break;
            default:
                break;
        }

    }
Esempio n. 8
0
 void FixedUpdate() {
     Vector3 direction = (player.transform.position - this.transform.position).normalized;
     Ray ray = new Ray(this.transform.position, direction);
     RaycastHit hitinfo;
     bool isPlayer = Physics.Raycast(ray, out hitinfo, 0.5f);
     if (isPlayer)
     {
         state = Enemy2State.Throw;
         if (playerController != null && playerController.Projectile && transform.localScale.x == -player.transform.localScale.x)
         {
             state = Enemy2State.Die;
             Instantiate(enemyExplosion, this.transform.position, Quaternion.identity);
             Destroy(this.gameObject, 0.5f);
         }
         isPlayer = false;
     }
     //Debug.DrawLine(transform.position, ray.direction, Color.red, 1);
 }
Esempio n. 9
0
 void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.tag == "PlayerProjectile")
     {
         Instantiate(enemyExplosion, transform.position, transform.rotation);
         Destroy(other.gameObject);
         state = Enemy2State.Die;
         Destroy(this.gameObject, 0.8f);
     }
     if (other.gameObject.tag == "Grenade")
     {
         Instantiate(grenadeExplosionPrefab, transform.position, transform.rotation);
         this.transform.position += transform.up * 6.5f * Time.deltaTime;
         state = Enemy2State.GrenadeDie;
         Destroy(this.gameObject, 1.2f);
     }
   
 }
Esempio n. 10
0
    // Update is called once per frame
    void Update()
    {
        if (transform.position.x > player.transform.position.x)
        {
            transform.localScale = new Vector3(1, 1, 1);
        }
        else
        {
            transform.localScale = new Vector3(-1, 1, 1);
        }
        mtime += Time.deltaTime;
        switch (state)
        {
        case Enemy2State.Idle:
            if (mtime > 0.8f)
            {
                if (Mathf.Abs(transform.position.x - transform.position.x) < 3.5f)
                {
                    state = Enemy2State.Throw;
                }
            }
            Enemy2Idle.SetActive(true);
            Enemy2Die.SetActive(false);
            Enemy2GrenadeDie.SetActive(false);
            Enemy2Throw.SetActive(false);
            break;

        case Enemy2State.Die:
            if (mtime > 1.5f)
            {
                AudioSource.PlayClipAtPoint(enemyDie, new Vector3(transform.position.x,
                                                                  transform.position.y, transform.position.z));
                mtime = 0;
            }
            Enemy2Idle.SetActive(false);
            Enemy2Die.SetActive(true);
            Enemy2GrenadeDie.SetActive(false);
            Enemy2Throw.SetActive(false);
            if (Enemy2Die != null)
            {
                Destroy(this.gameObject, 1f);
            }
            break;

        case Enemy2State.GrenadeDie:
            if (mtime > 1.5f)
            {
                AudioSource.PlayClipAtPoint(enemyDie, new Vector3(transform.position.x,
                                                                  transform.position.y, transform.position.z));
                mtime = 0;
            }

            Enemy2Idle.SetActive(false);
            Enemy2Die.SetActive(false);
            Enemy2GrenadeDie.SetActive(true);
            Enemy2Throw.SetActive(false);
            if (Enemy2Throw != null)
            {
                Destroy(this.gameObject, 1f);
            }
            break;

        case Enemy2State.Throw:
            Enemy2Idle.SetActive(false);
            Enemy2Die.SetActive(false);
            Enemy2GrenadeDie.SetActive(false);
            Enemy2Throw.SetActive(true);
            timer -= Time.deltaTime;
            if (timer < 0 && Mathf.Abs(transform.position.x - player.transform.position.x) < 3.5f)
            {
                bomb = Instantiate(bombPrefab, this.transform.position, this.transform.rotation) as GameObject;
                if ((!float.IsNaN(BallisticVel(player.transform, bomb.transform).x)) &&
                    (!float.IsNaN(BallisticVel(player.transform, bomb.transform).y)) &&
                    (!float.IsNaN(BallisticVel(player.transform, bomb.transform).z)))
                {
                    bomb.rigidbody.velocity = 1.1f * BallisticVel(player.transform, bomb.transform);
                }
                timer = 0.5f;
                Destroy(bomb, 5);
            }
            break;

        default:
            break;
        }
    }
Esempio n. 11
0
 // Use this for initialization
 void Start()
 {
     state            = Enemy2State.Idle;
     player           = GameObject.FindGameObjectWithTag("Player");
     playerController = GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>();
 }
Esempio n. 12
0
    // Update is called once per frame
    void Update()
    {
        //FSM control code below
        switch (state)
        {
        //starts in the default state
        case Enemy2State.DEFAULT:
            destination = transform.position + RandomPosition();
            //add a random position to the enemy's position that the enemy will move to

            //if the player is less than the "chaseDistance" from the enemy, switch to the "CHASE" state
            if (Vector3.Distance(transform.position, player.transform.position) < chaseDistance)
            {
                state = Enemy2State.CHASE;
            }
            else          //move the enemy randomly if the enemy is too far from the enemy
            {
                state = Enemy2State.MOVING;
                agent.SetDestination(destination);      //destination will be a random location
            }

            if (Vector3.Distance(transform.position, player.transform.position) <= attackDistance)
            {
                state = Enemy2State.ATTACK;
            }
            break;

        //Moving state controls random movement
        case Enemy2State.MOVING:
            isRunning   = true;
            isAttacking = false;
            BearAnimations(isRunning, isAttacking);

            //Debug.Log("Dest = " + destination);
            //when enemy is < 5 from the random distance, change destination again (done in Default state)
            if (Vector3.Distance(transform.position, destination) < 5)
            {
                state = Enemy2State.DEFAULT;
                //firePoint.shoot = false;
            }
            //if the enemy gets close enough to the player, switch to the chase state and chase the player
            if (Vector3.Distance(transform.position, player.transform.position) < chaseDistance)
            {
                state = Enemy2State.CHASE;
                //firePoint.shoot = false;
            }

            if (Vector3.Distance(transform.position, player.transform.position) <= attackDistance)
            {
                state = Enemy2State.ATTACK;
                //firePoint.shoot = true;
            }
            break;

        //state that chases the player
        case Enemy2State.CHASE:
            isRunning   = true;
            isAttacking = false;
            BearAnimations(isRunning, isAttacking);
            //FindObjectOfType<AudioManager>().Play("chase");
            //if the distance b/w the enemy and player exceeds the chase distance, switch to Default state
            if (Vector3.Distance(transform.position, player.transform.position) > chaseDistance)
            {
                //FindObjectOfType<AudioManager>().Play("lost");
                state = Enemy2State.DEFAULT;
                //firePoint.shoot = false;
            }

            if (Vector3.Distance(transform.position, player.transform.position) <= attackDistance)
            {
                state = Enemy2State.ATTACK;
                //firePoint.shoot = true;
            }
            FaceTarget();
            agent.SetDestination(player.transform.position);        //moves the enemy to the player's position

            break;

        //state where the enemy attacks the player
        case Enemy2State.ATTACK:
            //FindObjectOfType<AudioManager>().Play("shoot");
            isRunning   = false;
            isAttacking = true;
            BearAnimations(isRunning, isAttacking);
            if (Vector3.Distance(transform.position, player.transform.position) > attackDistance)
            {
                //FindObjectOfType<AudioManager>().Play("get back");
                state = Enemy2State.CHASE;
                //firePoint.shoot = false;
            }

            if (Vector3.Distance(transform.position, player.transform.position) > chaseDistance)
            {
                state = Enemy2State.DEFAULT;
                //firePoint.shoot = false;
            }

            if (Time.time > biteTime)
            {
                //FindObjectOfType<AudioManager>().Play("blaster SFX");
                //firePoint.FireBullet();
                biteTime = Time.time + chewTime;
            }
            FaceTarget();
            agent.SetDestination(player.transform.position);

            break;

        default:
            break;
        }
    }