i-school - 異なる色のブロックをランダムに生成して配置する

設計


 先ほど作成し、2つ以上の種類になったブロックをランダムに選択して、ゲーム画面に生成し、配置するようにします。
ブロックの耐久力や得点が異なりますし、ゲーム実行のたびにランダム生成されますので、ゲーム性が非常に上がります。

実装手順


1.BoxInit.csスクリプトを修正します。
2.ゲームを実行し、BoxInitのboxPrefabs配列に登録したブロックがランダムで生成されて並ぶかを確認します。

1.BoxInit.csスクリプトを修正します。


 このスクリプトでは従来、順番にBoxを生成していますので、生成する順番はそのままに、生成されるBoxの内容をランダムなものに変更します。

BoxInit.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoxInit : MonoBehaviour {

    public GameObject [] boxObjPrefabs;  // 配列に変更します。外部で生成したいプレファブを指定(BoxのPrefabはboxObjPrefabs[0]、HardBoxのPrefabはboxObjPrefabs[1]にアサインする、など)
    public GameObject boxesObj;          // BoxesオブジェクトはboxesObj変数に格納される。

    //Awake関数内の処理はStartよりも先に実行される。
    void Awake() {

        //Hierarchyタブの中からMasterゲームオブジェクトを探してmasterobjに格納
        GameObject masterObj = GameObject.Find("Master"); 

        for (int x = 0; x < 8; x++) {
            for (int y = 0; y < 5; y++) {
                //0から配列boxObjPrefabsの要素数-1までの範囲で乱数を作って、それをrandomValueに格納する。要素数が2の場合には、0か1が格納される。   <- ここから
                int randomValue = Random.Range(0, boxObjPrefabs.Length);     
                         
                //Box、またはHardBoxを複製し、gに格納する(複製してできたオブジェクトは、boxesObjに格納されているBoxesゲームオブジェクトの子オブジェクトとなる)。
                GameObject g = Instantiate(boxObjPrefabs[randomValue], boxesObj.transform);                                              // <- ここまで追加

                //複製してできたオブジェクトの位置の変更
                g.transform.position = new Vector3((2f + (1f * y)), 0.4f, (-4.2f + (1.2f * x)));

                //DestroyerスクリプトのmasterobjにMasterゲームオブジェクトを格納
        g.GetComponent<Destroyer>().masterObj = masterObj; 
            }
        }
    }

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
}

 修正が完了したらヒエラルキーにあるHakoゲームオブジェクトのインスペクターを確認します。

 生成するBoxプレファブの種類は配列になっており、この情報はインスペクターにて変更が可能です。

 BoxPrefabs の変数は Sizeが0になっていますので、そちらを生成したい種類のBox数にします。例えば、4つBoxのプレファブを用意している場合には、Size 4 に設定してください。
その後、Element という項目が Element 0 -4 まで追加されます。

 こちらにはBoxのプレファブ・ゲームオブジェクトをアサインが可能になりますので、Prefabsフォルダにある各Boxのプレファブ・オブジェクトを順番に選択してアサインします。
ヒエラルキーにあるBoxのプレファブではなくて、必ず、Project内のPrefabsフォルダにあるBoxをドラッグアンドドロップしてアサインしてください。(こちらが設計図です)

 これで生成される種類のBoxの指定が完了しました。(下記の画像はSize 2 の場合です)



2.ゲームを実行し、BoxInitのboxPrefabs配列に登録したブロックがランダムで生成されて並ぶかを確認します。


 何回か実行して確認してみましょう。