IEnumerator Coroutine()
 {
     while (true)
     {
         for (int i = 0; i < followersNum; i++)
         {
             if (_followers[i] != null && player != null)
             {
                 if (managerObj.IsGamePause() != true)
                 {
                     if (Input.GetKey("space"))
                     {
                         if (_followers[i] != null && player != null)
                         {
                             //Debug.Log("This is shoot from options");
                             if (shotType.getShotType() == 1)
                             {
                                 Instantiate(bullet, _followers[i].transform.position, _followers[i].transform.rotation);
                             }
                             else if (shotType.getShotType() == 2)
                             {
                                 Instantiate(bullet2, _followers[i].transform.position, _followers[i].transform.rotation);
                             }
                             else if (shotType.getShotType() == 3)
                             {
                                 Instantiate(bullet3, _followers[i].transform.position, _followers[i].transform.rotation);
                             }
                             else if (shotType.getShotType() == 4)
                             {
                                 Instantiate(bullet4, _followers[i].transform.position, _followers[i].transform.rotation);
                             }
                         }
                     }
                 }
             }
         }
         yield return(new WaitForSeconds(shotType.getPlayerShotDelay()));
     }
 }
    // 弾が表示された時に呼び出される
    void OnEnable()
    {
        shotType    = GetComponent <ShotType> ();
        missileBomb = GetComponent <MissileBomb> ();        //爆風発生用コンポネント
        managerObj  = FindObjectOfType <Manager> ();

        if (shotType != null)
        {
            //shotTypeの値によって弾道を変更する ここでは弾丸の軌道を管理する 基本は前方へ射出する
            int selectedShotType = shotType.getShotType();
            switch (selectedShotType)
            {
            case 1:
            case 2:
            case 3:
                rigidbody2D.velocity = transform.up.normalized * speed;
                break;

            case 4:
                //ミサイルの処理
                //serchTagメソッドで索敵する際の注意!! タグ名をつけないとミサイルが参照先を失ってその場に停滞してしまう
                enemy_obj = serchTag(gameObject, "Enemy");
                if (enemy_obj != null)
                {
                    Missile_Homing(enemy_obj);
                    LookAt2D(enemy_obj);
                }
                else
                {
                    //敵が見つからない場合はまっすぐ飛ぶ
                    rigidbody2D.velocity = transform.up.normalized * speed;
                }

                //誘導がうまくできなければまっすぐ飛ぶ
                rigidbody2D.velocity = transform.up.normalized * speed;
                break;

            default:
                rigidbody2D.velocity = transform.up.normalized * speed;
                break;
            }
        }
        else
        {
            //shotTypeに依存しない処理 何かしらの問題でshotType取得に失敗した場合まっすぐ飛ぶ
            rigidbody2D.velocity = transform.up.normalized * speed;
        }
    }
Exemple #3
0
    IEnumerator Coroutine()
    {
        while (true)
        {
            for (int i = 0; i < followersNum; i++)
            {
                if (_followers[i] != null && player != null)
                {
                    if (managerObj.IsGamePause() != true)
                    {
                        if (managerObj.isTouch || managerObj.isAlwaysShoot != false)
                        {
                            if (_followers[i] != null && player != null)
                            {
                                switch (shotType.getShotType())
                                {
                                case 1:
                                    ObjectPool.instance.GetGameObject(bullet, _followers[i].transform.position, _followers[i].transform.rotation);
                                    break;

                                case 2:
                                    ObjectPool.instance.GetGameObject(bullet2, _followers[i].transform.position, _followers[i].transform.rotation);
                                    break;

                                case 3:
                                    ObjectPool.instance.GetGameObject(bullet3, _followers[i].transform.position, _followers[i].transform.rotation);
                                    break;

                                case 4:
                                    ObjectPool.instance.GetGameObject(bullet4, _followers[i].transform.position, _followers[i].transform.rotation);
                                    break;

                                default:
                                    ObjectPool.instance.GetGameObject(bullet, _followers[i].transform.position, _followers[i].transform.rotation);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            yield return(new WaitForSeconds(shotType.getPlayerShotDelay()));
        }
    }
    //========== メンバ変数 ==========
    //None

    IEnumerator Start()
    {
        // コンポーネントを取得
        followerMng = FindObjectOfType <FollowerManager> ();
        playerlife  = GetComponent <Life> ();
        managerObj  = FindObjectOfType <Manager> ();
        shotType    = GetComponent <ShotType> ();
        spaceship   = GetComponent <Spaceship> ();
        superShot   = GetComponent <SuperShot> ();
        audioObj    = FindObjectOfType <AudioManager> ();

        while (true)
        {
            int selectedShotType = shotType.getShotType();
            Attack(selectedShotType);
            // 弾をプレイヤーと同じ位置/角度で作成
            yield return(new WaitForSeconds(shotType.getPlayerShotDelay()));
        }
    }
    void Start()
    {
        /*
         * static変数、shotTypeの値によって弾道を変更する
         */
        shotType = GetComponent <ShotType> ();

        /*
         * 爆風発生用コンポネント
         */
        missileBomb = GetComponent <MissileBomb> ();

        if (shotType != null)
        {
            //ここでは弾丸の軌道を管理する
            //基本は前方へ射出する
            if (shotType.getShotType() == 1)
            {
                rigidbody2D.velocity = transform.up.normalized * speed;
                Destroy(gameObject, lifeTime);
            }
            else if (shotType.getShotType() == 2)
            {
                rigidbody2D.velocity = transform.up.normalized * speed;
                Destroy(gameObject, lifeTime);
            }
            else if (shotType.getShotType() == 3)
            {
                rigidbody2D.velocity = transform.up.normalized * speed;
                Destroy(gameObject, lifeTime);
            }
            else if (shotType.getShotType() == 4)
            {
                //serchTagメソッドで索敵する際の注意!!
                //タグ名をつけないとミサイルが参照先を失ってその場に停滞してしまう

                enemy_obj = serchTag(gameObject, "Enemy");
                if (enemy_obj != null)
                {
                    Missile_Homing(enemy_obj);
                    LookAt2D(enemy_obj);
                    Destroy(gameObject, lifeTime);
                }
                else
                {
                    //敵が見つからない場合はまっすぐ飛ぶ
                    //print ("missile none target !!");
                    rigidbody2D.velocity = transform.up.normalized * speed;
                    Destroy(gameObject, lifeTime);
                }

                //誘導がうまくできなければまっすぐ飛ぶ
                rigidbody2D.velocity = transform.up.normalized * speed;
                // lifeTime秒後に削除
                Destroy(gameObject, lifeTime);
            }
            //ここまでミサイルの処理
        }
        else
        {
            //何かしらの問題でshotType取得に失敗した場合まっすぐ飛ぶ
            //shotTypeに依存しない処理
            //print ("Bullet.cs... shotType NONE!");
            rigidbody2D.velocity = transform.up.normalized * speed;
            // lifeTime秒後に削除
            Destroy(gameObject, lifeTime);
        }
    }
Exemple #6
0
    //衝突を確認処理
    public void checkCollision(Collider2D c)
    {
        // レイヤー名を取得
        string layerName = LayerMask.LayerToName(c.gameObject.layer);

        //DestroyArea 内に入ったら検知するフラグを切り替え
        if (isEnterDestroyArea != true)
        {
            if (layerName == "DestroyArea")
            {
                isEnterDestroyArea = true;
            }
        }

        // レイヤー名がBullet (Player) or Bomb 以外の時は何も行わない
        if (layerName != "Bullet(Player)" && layerName != "Bomb")
        {
            return;
        }
        else
        {
            // PlayerBulletのTransformを取得
            Transform playerBulletTransform = c.transform.parent;

            if (layerName != "Bomb")
            {
                //Player bullet ヒットポイントを減らす
                Bullet bullet = playerBulletTransform.GetComponent <Bullet>();
                hp = hp - bullet.power;

                //貫通弾の処理
                if (shottype.getShotType() != 3)
                {
                    Destroy(c.gameObject);
                }
            }
            else
            {
                // Bomb ヒットポイントを減らす
                hp = hp - FindObjectOfType <BombManager> ().bombPower;
            }

            // ヒットポイントが0以下であれば
            if (hp <= 0)
            {
                // スコアコンポーネントを取得してポイントを追加
                FindObjectOfType <Score>().AddPoint(point);

                // スコアコンポーネントを取得して倒した敵の数を加算
                if (isLastBoss)
                {
                    FindObjectOfType <Score>().setDeadBossNum();
                }
                else if (isSpecialEnemy)
                {
                    FindObjectOfType <Score>().setDeadMiddleBossNum();
                }
                else
                {
                    FindObjectOfType <Score>().setDeadEnemyNum();
                }

                // 爆発
                spaceship.Explosion();

                // エネミーの削除
                Destroy(gameObject);

                //ItemGet
                if (Item != null)
                {
                    Instantiate(Item, transform.position, Quaternion.identity);
                }

                //最後のボスの場合は、倒したらクリアGUIを表示
                if (isLastBoss != false)
                {
                    //スコアGUIの呼び出し
                    FindObjectOfType <Score>().setupScoreGui();

                    //ゲームを停止
                    FindObjectOfType <Manager> ().isPause = true; //ゲーム停止する場合
                }
            }
            else
            {
                spaceship.GetAnimator().SetTrigger("Damage");
            }
        }
    }