プレハブ化(テンプレート化)

ボールを何個も表示したい場合は、ボールをプレハブ化して、プログラムから必要なタイミングで出現させる方法が現実的です。

ここでは、2秒ごとにボールをランダムな位置に出現させることを考えます。

① Ballオブジェクトを作る

ヒエラルキーで Ball オブジェクトを作ります。

② Ballをプレハブ化する

ヒエラルキーの Ball を、Projectウィンドウの Assets にドラッグ&ドロップします。

これで、Assets内に Ballプレハブ が作られます。

③ ヒエラルキーのBallを削除する

今回はプログラムからBallを出現させるので、ヒエラルキーにある元の Ball オブジェクトは削除します。

④ Ballを出現させるためのオブジェクトを作る

ヒエラルキーで空のGameObjectを作り、

BallPre

という名前にします。

⑤ スクリプトを作る

BallPre を選択して、

Add Component → New Script

から、

BallPreSc

というスクリプトを作ります。

⑥ Ballプレハブを登録する変数を作る

BallPreSc に次のように書きます。

public GameObject ballPrefab;

すると、BallPreのInspectorに Ball Prefab という項目が表示されます。

⑦ Ballプレハブを登録する

Assetsにある Ballプレハブ を、Inspectorの Ball Prefab にドラッグ&ドロップします。

これで、スクリプトからBallプレハブを利用できるようになります。

⑧ 2秒ごとにBallを出現させる

BallPreSc を次のようにします。

using UnityEngine;

public class BallPreSc : MonoBehaviour

{

    public GameObject ballPrefab;

    void Start()

    {

        InvokeRepeating(“SpawnBall”, 2f, 2f);

    }

    void SpawnBall()

    {

        Vector3 spawnPosition = new Vector3(

            Random.Range(-11f, 11f),

            transform.position.y,

            0f

        );

        Instantiate(ballPrefab, spawnPosition, Quaternion.identity);

    }

}

プログラムの意味

InvokeRepeating(“SpawnBall”, 2f, 2f);

これは、

「ゲーム開始から2秒後に SpawnBall() を実行し、その後も2秒間隔で繰り返す」

という意味です。

そして、

Random.Range(-11f, 11f)

によって、X座標を -11~11の範囲からランダムに決定しています。

最後に、

Instantiate(ballPrefab, spawnPosition, Quaternion.identity);

によって、指定した位置にBallプレハブを生成します。

つまり全体の流れは、Ballを作る → プレハブ化 → スクリプトにプレハブを登録 → InvokeRepeatingで2秒ごとにSpawnBallを呼ぶ → InstantiateでBallを生成

コメント

タイトルとURLをコピーしました