예제 #1
0
    /// <summary>
    /// Enemyの生成
    /// </summary>
    private void Create()
    {
        //生成したenemyをしまう親オブジェクトを設定
        enemyParent = new GameObject("Enemys").transform;

        rowAliveEnemyNum = rowAliveEnemyNum.Select(i => enemyWidthNum).ToArray();        //全要素にenemyの1行に設置する数を代入する
        //全ての列のidをListに追加
        for (int i = 0; i < enemyWidthNum; i++)
        {
            columnEnemyAliveCash.Add(i);
        }

        //行ごとにContollerを作成
        enemyRows = new EnemyRowController[enemyHeightNum];
        for (int i = 0; i < enemyHeightNum; i++)
        {
            //行に関するControllerの作成
            int                lineNumber = i + 1;
            string             rowControllerPrefabName = "Enemy" + lineNumber + "RowController";
            GameObject         column     = new GameObject(rowControllerPrefabName); //行のControllerとなるオブジェクトを生成
            EnemyRowController controller = column.AddComponent <EnemyRowController>();
            enemyRows[i] = controller;

            column.transform.parent = transform;

            //列に対して与える情報を設定
            EnemyRowCreateInfo rowInfo = new EnemyRowCreateInfo();
            rowInfo.rowId              = i;
            rowInfo.rowInfo            = FindEnemyInfo(i);
            rowInfo.enemyHeightNum     = enemyHeightNum;
            rowInfo.enemyWidthNum      = enemyWidthNum;
            rowInfo.startUpStageId     = stageNum - 1;    //TODO ステージ数によって変化させる
            rowInfo.enemyWidthInterval = enemyWidthInterval;
            rowInfo.stageNum           = stageNum;
            rowInfo.enemyMinPos        = new Vector3(minPos.x, minPos.y + enemyBottomPosYDiff, 0);
            rowInfo.enemyMaxPos        = new Vector3(maxPos.x, maxPos.y - enemyTopPosYDiff, 0);

            controller.Create(rowInfo, enemyParent, onAddScore, (id) =>
            {
                rowAliveEnemyNum[id]--;
                if (rowAliveEnemyNum.Sum() == 0)        //敵が全員死んだ時
                {
                    onDeathAll();
                }

                if (rowAliveEnemyNum[id] == 0)        //idの行のEnemyが全滅した時
                {
                    // TODO
                }
            });
        }
    }
예제 #2
0
    /// <summary>
    /// 行に対してのEnemy作成
    /// </summary>
    public void Create(EnemyRowCreateInfo rowInfo, Transform enemyCrowdParent, UnityAction <int> _onAddScore, UnityAction <int> _onDeath)
    {
        this.rowInfo = rowInfo;
        int enemyWidthNum = rowInfo.enemyWidthNum;

        //親となる空オブジェクトを生成し、その中にこの後生成するenemyオブジェクトを入れていく
        Transform enemyRowParent = new GameObject("Enemys" + rowInfo.rowId + "Rows").transform;

        enemyRowParent.parent = enemyCrowdParent;

        // 前に移動する際の移動量
        float verticalDiff = (rowInfo.enemyMaxPos.y - rowInfo.enemyMinPos.y) / (rowInfo.stageNum - 1);

        enemy = new GameObject[enemyWidthNum];        //メモリの確保

        //enemyの生成
        for (int i = 0; i < enemyWidthNum; i++)
        {
            // enemyの生成・登録
            GameObject obj = Instantiate(rowInfo.rowInfo.Prefab);
            enemy[i] = obj;

            //親オブジェクトに登録していく
            obj.transform.parent = enemyRowParent;

            int     upperNumber = rowInfo.enemyHeightNum - rowInfo.rowId - 1;                                                                                 //Enemy全体で上から数えて何番目の行か(一番上の行は0)
            int     stageNumber = rowInfo.startUpStageId - 2 * upperNumber;                                                                                   //前から何行目か
            Vector3 enemyPos    = new Vector3(rowInfo.enemyMinPos.x + rowInfo.enemyWidthInterval * i, rowInfo.enemyMinPos.y + stageNumber * verticalDiff, 0); //位置の確定

            obj.transform.position = enemyPos;

            EnemyController controller = obj.GetComponent <EnemyController>();
            controller.BootUp(i, rowInfo.rowInfo.Point, _onAddScore, () =>
            {
                _onDeath(rowInfo.rowId);
            }, rowInfo.enemyWidthInterval / moveNextEnemyActionNum, verticalDiff, rowInfo.enemyMinPos, rowInfo.enemyMaxPos);
        }
    }