スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unityオブジェクトをランダムな位置で連続生成する方法

Unity

はじめに

こんにちは!今日は、Unityを使ってキューブを1秒おきに出現させ、それぞれのY座標をランダムに変化させながら左から右へ移動させる方法を説明します。このプロジェクトは初心者にも簡単にできるので、一緒にやってみましょう!

1.新しいプロジェクトの作成

まず、Unityを開いて新しい3Dプロジェクトを作成します。プロジェクト名は「MovingCubes」などがよいでしょう。

2.キューブを移動させるスクリプトの作成

次に、キューブを左から右へ移動させるスクリプトを作成します。スクリプトの名前は「CubeMover」にしましょう。

  1. プロジェクトウィンドウで「Assets」フォルダーを右クリックし、「Create」 > 「C# Script」を選択します。
  2. スクリプトに「CubeMover」という名前を付けて、ダブルクリックして開きます。
  3. 以下のコードをスクリプトにコピー&ペーストします。

全体の説明

このコードは、Unityでキューブを右方向に動かし、特定の位置に達したらそのキューブを消すスクリプトです。

各部分の説明

  1. using UnityEngine;
    • これはUnityのライブラリを使うための宣言です。Unityの基本的な機能を使うことができます。
  2. public class CubeMover : MonoBehaviour
    • これはCubeMoverという新しいクラスを作っています。このクラスはMonoBehaviourを継承しています。MonoBehaviourはUnityの基本的なクラスで、これを継承することでUnityのゲームオブジェクトにアタッチして使うことができます。
  3. void Update()
    • Updateメソッドは、毎フレーム(画面が更新されるたび)に呼ばれます。ここに書かれたコードは繰り返し実行されます。
  4. transform.position += new Vector3(Time.deltaTime * 5, 0, 0);
    • これはオブジェクトの位置を右方向に動かしています。transform.positionはオブジェクトの現在の位置を示しています。
    • new Vector3(Time.deltaTime * 5, 0, 0)は、X方向(右方向)に時間に応じた一定の速さ(ここでは5)で移動させるためのベクトルです。Time.deltaTimeは前のフレームからの経過時間で、これを使うことでどんなPCでも一定の速さで動くようにします。
  5. if (transform.position.x >= 10f)
    • これはキューブのX座標が10以上になったかどうかをチェックしています。
  6. Destroy(gameObject);
    • 上の条件が満たされた場合、Destroy(gameObject)が呼ばれます。これにより、このスクリプトがアタッチされているオブジェクト(ここではキューブ)が削除されます。

全体の動き

  1. スクリプトがアタッチされたキューブは、ゲームが開始されると右方向に動き始めます。
  2. 毎フレームごとに、キューブの位置が少しずつ右に移動します。
  3. キューブのX座標が10に達すると、そのキューブは消えます。
using UnityEngine;

public class CubeMover : MonoBehaviour
{
    void Update()
    {
        transform.position += new Vector3(Time.deltaTime * 5, 0, 0);

        if (transform.position.x >= 10f)
        {
            Destroy(gameObject);
        }
    }
}

3.キューブのプレハブを作成

次に、キューブのプレハブを作成します。

  1. ヒエラルキーウィンドウで右クリックし、「3D Object」 > 「Cube」を選択します。
  2. CubeMoverスクリプトをアタッチします。
  3. プロジェクトウィンドウで「Assets」フォルダーにドラッグ&ドロップしてプレハブ化します。
  4. ヒエラルキーウィンドウからキューブを削除します。

4.キューブを出現させるスクリプトの作成

次に、キューブを1秒おきに出現させるスクリプトを作成します。スクリプトの名前は「CubeSpawner」にしましょう。

  1. プロジェクトウィンドウで「Assets」フォルダーを右クリックし、「Create」 > 「C# Script」を選択します。
  2. スクリプトに「CubeSpawner」という名前を付けて、ダブルクリックして開きます。
  3. 以下のコードをスクリプトにコピー&ペーストします。

コード全体の説明

このスクリプトは、一定の時間ごとにキューブを生成します。生成されるキューブの位置はランダムな高さ(Y軸方向)になります。これを実現するために、Update メソッド内で時間を計測し、時間が経過したら新しいキューブを生成します。

各部分の説明

using

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
  • using 文は、他のコードを使うための宣言です。ここでは、System.CollectionsSystem.Collections.GenericUnityEngine を使っています。特に UnityEngine はUnityの機能を使うために必要です。

クラス宣言

public class CubeManager : MonoBehaviour
  • public class CubeManager : MonoBehaviour は、新しいクラス CubeManager を定義しています。MonoBehaviour を継承しているので、Unityのオブジェクトとして動作します。

変数宣言

    public GameObject cubePrefab; 
    private float time;
    private int vecY;
  • public GameObject cubePrefab; は、インスペクターから設定できるキューブのプレハブ(テンプレート)を指します。
  • private float time; は、時間を計測するための変数です。
  • private int vecY; は、キューブを生成するY座標をランダムに決めるための変数です。

Update メソッド

    void Update()
    {
        time -= Time.deltaTime;

        if (time <= 0.0f)
        {
            vecY = Random.Range(0, 5);
            Instantiate(cubePrefab, new Vector3(-8, vecY, 0), Quaternion.identity);
            time = 1.0f;
        }
    }
  • void Update() は、毎フレーム(1秒間に60回など)呼び出されるメソッドです。
  • time -= Time.deltaTime; は、time 変数から経過時間を引いています。Time.deltaTime は前のフレームからの経過時間を表します。
  • if (time <= 0.0f) は、time が0以下になったときの処理を定義しています。
    • vecY = Random.Range(0, 5); は、0から4の範囲でランダムな整数を vecY に代入します。
    • Instantiate(cubePrefab, new Vector3(-8, vecY, 0), Quaternion.identity); は、新しいキューブを (x: -8, y: vecY, z: 0) の位置に生成します。Quaternion.identity は回転なしの意味です。
    • time = 1.0f; は、time 変数を1.0秒にリセットします。

全体の動き

  1. 毎フレームごとに Update メソッドが呼ばれ、time から経過時間が引かれます。
  2. time が0以下になると、0から4のランダムなY座標で新しいキューブが左端の位置に生成されます。
  3. time が1.0秒にリセットされ、また time が0になるまで待ちます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeSpawner: MonoBehaviour
{
    public GameObject cubePrefab; 
    private float time;
    private int vecY;

    void Update()
    {
        time -= Time.deltaTime;

        if (time <= 0.0f)
        {
            vecY = Random.Range(0, 5);
            Instantiate(cubePrefab, new Vector3(-8, vecY, 0), Quaternion.identity);
            time = 1.0f;
        }
    }
}

5.CubeSpawnerスクリプトの設定

最後に、CubeSpawnerスクリプトを設定します。

  1. ヒエラルキーウィンドウで右クリックし、「Create Empty」を選択して「CubeSpawner」という名前を付けます。
  2. CubeSpawnerに「CubeSpawner」スクリプトをドラッグ&ドロップします。
  3. CubeSpawnerオブジェクトを選択し、インスペクターで「CubePrefab」フィールドにキューブのプレハブをドラッグ&ドロップします。

6. ゲームをプレイ

すべての設定が完了したら、Unityエディター上部の「Play」ボタンをクリックしてゲームを開始します。キューブが1秒おきに出現し、それぞれのY座標がランダムに変化しながら左から右へ移動するのを確認できるはずです。

これで完成です!お疲れさまでした。質問があれば、いつでも聞いてくださいね。

おすすめのアセット

Infinite Runner Engine 3Dは、簡単に無限ランナーゲームを作れるUnityのアセットです。キャラクターが永遠に走り続けるスタイルのゲームを作成したい方に最適です。このアセットは、プレイヤーキャラクターの動きや障害物の生成、スコアシステムなど、必要な要素がすべて揃っています。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました