Cou氏の徒然日記

ほのぼの日記ブログです。

Unityで遊ぼう [ブロック崩し編 その4:プレハブ化+オブジェクト生成]

前回の続き。

 

今までは固定でオブジェクトを置いていましたが、これではそのパターン以外何も変化がありません。

ボール転がしゲームと同じように、各オブジェクトをプレハブ化して、起動時にオブジェクトを初期化して配置するようにします。

 

作ったオブジェクトをAssets配下に移動してプレハブ化。

f:id:coublood:20210117005755p:plain

ヒエラルキーにある元のオブジェクトは削除してしまってOK。

これでさっぱりしますね。

 

そして、空オブジェクトを作って、そこにスクリプトを追加。

f:id:coublood:20210117010111p:plain

いきなり色々と作ると大変なので、まずはブロックを規則正しく担ってしまいますが、一定数を一定座標に配置するように作ってみます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BreakBlocksGame : MonoBehaviour
{
    public GameObject PlayerPrefab;
    public GameObject GameBoardPrefab;
    public GameObject BallPrefab;
    public GameObject BlockPrefab;

    // Start is called before the first frame update
    void Start()
    {
        // ボードを配置 //
        GameObject GameBoard = GameObject.Instantiate(GameBoardPrefab);
         // プレイヤーオブジェクトの配置 //
        GameObject Player = GameObject.Instantiate(PlayerPrefab);
        // ボールオブジェクトの配置
        GameObject Ball = GameObject.Instantiate(BallPrefab);
        // ブロックを配置 (関数で実施) //
        ArrangeBlocks();
    }

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

    // ブロック配置関数 //
    private void ArrangeBlocks()
    {
        for (int i=0; i<5; i++)
        {
            for (int j=0; j<5; j++)
            {
                GameObject block = GameObject.Instantiate(BlockPrefab);
                block.transform.position = new Vector3(-40 + 20*j, 0, 5 + 8*i);
            }
        }
    }
}
  • Start : 開始時に呼び出される関数(1度だけ)
  • Update : フレームごとに呼び出される関数(繰り返し)

なので、Start() の中で各オブジェクトを初期化。

そして、ブロックはforループで適当に配置。
 

あとこれとは別にボールが大きすぎたので、気持ち小さめに(笑)

 

そしてテスト。

うん、何となくうまくいきましたね。


ブロック崩し テスト5

 

続く。 

coublood.hatenablog.com