コード例 #1
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Bullet")
        {
            //当たった魔法の情報を取得
            BulletDataSO.BulletData bulletData = other.gameObject.GetComponent <BulletController>().bulletData;

            if (bulletData.no == 0)
            {
                Damage(bulletData);
            }
            else if (bulletData.no == 1)
            {
                enemy = GameObject.FindGameObjectsWithTag("Enemy");

                Instantiate(other.gameObject.GetComponent <BulletController>().bulletDataSO.bulletDataList[2].bulletPrefab,
                            new Vector3(gameObject.transform.position.x, 2, gameObject.transform.position.z), Quaternion.identity);

                for (int i = 0; i < enemy.Length; i++)
                {
                    enemy[i].GetComponent <EnemyController>().Damage(bulletData);
                }
            }
        }


        if (other.gameObject.tag == "MainCamera")
        {
            ChangeAttackFlag();
        }
    }
コード例 #2
0
    public void Shot(Vector3 dir, BulletDataSO.BulletData bulletData, BulletDataSO bulletDataSO)
    {
        this.bulletData   = bulletData;
        this.bulletDataSO = bulletDataSO;

        GetComponent <Rigidbody>().AddForce(dir);

        Destroy(gameObject, 2f);
    }
コード例 #3
0
    /// <summary>
    /// バレットの制御
    /// EnemyController
    /// PlayerController
    /// </summary>
    /// <param name="direction"></param>
    /// <param name="bulletData"></param>
    public void ShotBullet(Vector3 direction, BulletDataSO.BulletData bulletData = null)
    {
        //引数よりバレットの情報を取得し、どのようなバレットであるのか振る舞いを決定
        this.bulletData = bulletData;

        //バレットのデータがない場合
        if (this.bulletData == null)
        {
            //ここで処理を終了する
            return;
        }

        //バレットの画像を決定
        imgBullet.sprite = this.bulletData.bulletSprite;

        //追尾玉のみ処理する
        if (bulletData.bulletType == BulletDataSO.BulletType.Player_Blaze)
        {
            //発射時にゲーム内にいるエネミーの情報を取得
            GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");

            //エネミーが1体以上いるなら
            if (enemies.Length > 0)
            {
                //一番近いエネミーとして、配列の最初のエネミーの位置情報を仮に登録
                nearPos = enemies[0].transform.position;

                //すべてのエネミーの位置を一つずつ順番に確認
                for (int i = 0; i < enemies.Length; i++)
                {
                    //現在の順番のエネミーの位置の情報を代入
                    Vector3 pos = enemies[i].transform.position;

                    //現在のエネミーの位置とnearPosの比較をして、画面下(プレイヤー)に近いものを
                    if (nearPos.x > pos.x && nearPos.y > pos.y)
                    {
                        //nearPosとして更新する
                        nearPos = pos;
                    }
                }

                //追尾するターゲットありとし、Updateメソッドを動くようにする
                isTarget = true;
            }
        }

        //追尾弾以外
        if (bulletData.bulletType != BulletDataSO.BulletType.Player_Blaze)
        {
            //バレットのゲームオブジェクトにアタッチされているRigidbody2Dを取得してAddForceメソッドを実行する
            GetComponent <Rigidbody2D>().AddForce(direction * this.bulletData.bulletSpeed);
        }

        //5秒後にバレットを破壊する
        Destroy(gameObject, 5f);
    }
コード例 #4
0
    /// <summary>
    /// 魔法が当たった時のダメージ処理
    /// </summary>
    public void Damage(BulletDataSO.BulletData bulletData)
    {
        int itemDrop = Random.Range(0, 100);

        //敵のHPを減算、HP量にHPバーを同期
        //attackLevelが1上がる毎に魔法の攻撃力が5ずつ上昇
        hp -= bulletData.power + GameLevel.instance.attackLevel * 5;
        BGMmanager.instance.PlaySE();
        UpdateHpBarValue(hp, maxHp);

        //HPが0になったら魂を生成して敵を破壊
        if (hp <= 0)
        {
            hp = 0;
            enemyGenerator.DecreaseEnemyCount();

            //ボスモンスターの場合
            if (isBoss == true)
            {
                //ボス撃破フラグの切り替え
                gameMaster.ChengeBossClear();
                enemyGenerator.isBossBattle = false;
            }

            //サーチ用エネミーリストからデータ削除、対応するインジケータの非表示

            //enemySearch.enemyList.Remove(enemyList[enemyNo]);

            // インジケーター表示対象をオフ
            if (targetIndicator != null)
            {
                targetIndicator.ResetTarget();
            }
            //searchArrow.GetComponent<Image>().enabled = false;

            //倒した敵の魂の生成、設定
            GameObject soul = Instantiate(downEffect, gameObject.transform.position + soulPos, Quaternion.identity);
            soul.GetComponent <DefeatEffect>().SetUpSoul(target);

            //アイテムを落とすかの判定
            if (itemDrop < 10)
            {
                EnemyDropItem();
            }

            gameMaster.CheckStageClear();

            Destroy(gameObject);
        }
    }
コード例 #5
0
    BulletDataSO.BulletData SelectMagic()
    {
        BulletDataSO.BulletData bulletData = null;

        if (useHighMagic == true)
        {
            bulletData = bulletDataSO.bulletDataList[1];
        }
        else
        {
            bulletData = bulletDataSO.bulletDataList[0];
        }

        return(bulletData);
    }
コード例 #6
0
    /// <summary>
    /// エネミーの追加設定
    /// </summary>
    /// <param name="enemyGenerator"></param>
    /// <param name="bulletData"></param>
    public void AdditionalSetUPEnemy(EnemyGenerator enemyGenerator, BulletDataSO.BulletData bulletData)
    {
        //引数で届いた情報を変数に代入してスクリプト内で利用可能にする
        this.enemyGenerator = enemyGenerator;

        //MoveEventSOスクリプタブルオブジェクトのGetMoveEventメソッドを実行し、戻り値で移動用のメソッドを受け取る
        moveEvent = this.enemyGenerator.moveEventSO.GetMoveEvent(enemyData.moveType);

        moveEvent.Invoke(transform, enemyData.moveDuration);


        if (bulletData != null && bulletData.bulletType != BulletDataSO.BulletType.None)
        {
            StartCoroutine(EnemyShot(bulletData));
        }
    }
コード例 #7
0
    private bool isCostPayment;      //現在コストを支払って開放済かどうか。 trueならコスト支払い完了。

    public void SetUpBulletSelectDetail(BulletSelectManager bulletSelectManager, BulletDataSO.BulletData bulletData)
    {
        this.bulletSelectManager = bulletSelectManager;

        this.bulletData = bulletData;

        //画像変更
        imgBulletBtn.sprite = this.bulletData.btnSprite;

        //ボタンにメソッド登録
        btnBulletSelect.onClick.AddListener(OnClickBulletSelect);

        //バレットを選択できない状態にきりかえる
        SwitchAcriveBulletBtn(false);

        //バレットを発射できる時間の設定をし、初期値とする
        initialLaunchTime = this.bulletData.launchTime;

        //バレットの発射できる時間を初期値から設定する
        launchTime = initialLaunchTime;

        //バレットの発射できる残り時間のゲージ表示を0にして非表示にする。
        imgLaunchTimeGauge.fillAmount = 0;

        //バレット選択ボタンを推せるようにするために必要なExpを表示
        txtOpenExpValue.text = this.bulletData.openExp.ToString();

        //初期バレット確認
        if (this.bulletData.openExp == 0)
        {
            //初期バレット用の設定
            isDefaultBullet = true;

            //装填中の状態に切り替える
            ChangeLoadingBullet(true);

            TurnActiveOpenExpValue(false);

            SwitchAcriveBulletBtn(true);

            // TODO そのほかに設定する処理を追加
        }

        //拝啓の属性画像の変更
        imgElementTypeBackground.sprite = bulletSelectManager.GetElementTypeSprite(this.bulletData.elementType);
    }
コード例 #8
0
    /// <summary>
    /// クリックした場所に向かって魔法を発射
    /// </summary>
    private void ShotBullet()
    {
        BulletDataSO.BulletData bulletData = null;
        GameObject bullet = null;

        bulletData = SelectMagic();

        bullet = Instantiate(bulletData.bulletPrefab, transform.position, Quaternion.identity);

        Ray     ray      = Camera.main.ScreenPointToRay(Input.mousePosition);
        Vector3 worldDir = ray.direction;

        bullet.GetComponent <BulletController>().Shot(worldDir.normalized * bulletData.speed, bulletData, bulletDataSO);

        if (bulletData.no == 1)
        {
            useHighMagic = false;
        }
    }
コード例 #9
0
    /// <summary>
    /// バレットの自動生成
    /// </summary>
    /// <param name="bulletData"></param>
    /// <returns></returns>
    private IEnumerator EnemyShot(BulletDataSO.BulletData bulletData)
    {
        while (true)
        {
            //エネミーのバレットのクローンを生成し、戻り値をbulletObjに代入
            GameObject bulletObj = Instantiate(enemyBulletPrefab, transform);

            //クローンのゲームオブジェクトからBulletスクリプトを取得してShotBulletメソッドを実行する
            bulletObj.GetComponent <Bullet>().ShotBullet(enemyGenerator.PreparateGetPlayerDirection(transform.position), bulletData);


            if (enemyData.moveType == MoveType.Boss_Horizontal)
            {
                //バレットとエネミーの親子関係を解消し、バレットの親をTemporaryObjectContainerオブジェクトに変更する
                bulletObj.transform.SetParent(TransformHelper.GetTemporaryObjectContainerTran());
            }

            yield return(new WaitForSeconds(bulletData.loadingTime));
        }
    }
コード例 #10
0
    private void PreparateGenerateBullet(Vector3 direction)
    {
        //現在使用しているバレットの情報を取得
        BulletDataSO.BulletData bulletData = GameData.instance.GetCullentBulletData();

        //バレットの種類(BulletType)を元に決定
        switch (bulletData.bulletType)
        {
        //BulletTypeがPlayer_NormalまたはPlayer_Blazeの場合(処理が同じ場合にはこのように記述できる
        case BulletDataSO.BulletType.Player_Normal:
        case BulletDataSO.BulletType.Player_Blaze:

            GenerateBullet(direction, bulletData);
            break;

        //BulletTypeがPlayer_3ways_Piercingの場合
        case BulletDataSO.BulletType.Player_3ways_Piercing:

            for (int i = -1; i < 2; i++)
            {
                //3方向に扇状に発射する
                GenerateBullet(new Vector3(direction.x + (0.5f * i), direction.y, direction.z), bulletData);
            }
            break;

        //BulletTypeがPlayer_5ways_Normalの場合
        case BulletDataSO.BulletType.Player_5ways_Normal:

            for (int i = -2; i < 3; i++)
            {
                //5方向に扇状に発射する
                GenerateBullet(new Vector3(direction.x + (0.25f + i), direction.y, direction.z), bulletData);
            }
            break;
        }
    }
コード例 #11
0
 /// <summary>
 /// 使用するバレットのデータを設定
 /// </summary>
 /// <param name="bulletData"></param>
 public void SetBulletData(BulletDataSO.BulletData bulletData)
 {
     cullentbulletData = bulletData;
 }
コード例 #12
0
 /// <summary>
 /// バレットの生成
 /// </summary>
 /// <param name="direction">弾の方向</param>
 /// <param name="bulletData">弾の振る舞い</param>
 private void GenerateBullet(Vector3 direction, BulletDataSO.BulletData bulletData)
 {
     //Bulletスクリプトにてバレットを生成し、ShotBulletメソッドを実行する
     Instantiate(bulletPrefab, transform).ShotBullet(direction, bulletData);
     SoundManager.instance.PlayVoice(SoundDataSO.VoiceType.Attack);
 }