UnityUnityメモ

Unityスクリプト入門!Prefabを順番に生成してみよう

Unity

はじめに

Unityで3種類のSphereのPrefabを1秒間隔で生成し、その種類を順番に切り替える方法を解説します。今回は簡単なスクリプトを書いて、順番にSphereを生成していきます。

Unityを触ったことがないという方はコチラの記事から見てみてください!



Step 1: Prefabの準備

まず、3種類のPrefabを準備する必要があります。以下の手順で進めていきましょう!


1. 3Dオブジェクトの作成

  1. Sphereを作成
    • Hierarchyウィンドウで右クリックします。
    • 3D ObjectSphere を選択します。
    • これで球体(Sphere)がシーンに追加されます。
  2. 球体のカスタマイズ
    • 作成したSphereを選択し、Inspectorウィンドウで以下のように変更して個性を持たせます。
      • サイズ変更: TransformのScaleを調整(例: 2, 2, 2)。
      • 色の変更: Materialを設定(色は赤、青、緑などを設定すると分かりやすい)。
  3. 同様の手順を3回繰り返し、異なる3種類のSphereを作成します。

2. Prefab化

  1. Prefabとして保存
    • 作成した3つのSphereをそれぞれ Projectウィンドウ にドラッグ&ドロップします。
    • これにより、Prefabとして保存されます。
  2. Prefabの名前変更
    • わかりやすい名前をつけます(例: Sphere1, Sphere2, Sphere3)。

これで、3種類のSphereがPrefabとして準備できました。次は、このPrefabを使って順番に生成するスクリプトを作成していきます!



Step 2: スクリプトの作成

次に、3種類のPrefabを順番に1秒間隔で生成するスクリプトを作成します。Unity初心者でも簡単にできるように、手順を丁寧に説明します!


1. スクリプトファイルの作成

  1. Scriptsフォルダの作成
    • Projectウィンドウで右クリック → CreateFolder を選択し、フォルダ名を Scripts にします。
  2. C#スクリプトの作成
    • Scriptsフォルダを右クリック → CreateC# Script を選択します。
    • スクリプトの名前を PrefabSpawner に変更します。

2. スクリプトにコードを記述

以下のコードをスクリプトに書き込みます。

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

public class PrefabSpawner : MonoBehaviour
{
    public GameObject[] ballArray; // 生成するPrefabの配列

    void Start()
    {
        // コルーチンの開始
        StartCoroutine("SpawnPrefabs");
    }

    IEnumerator SpawnPrefabs()
    {
        // 無限ループでPrefabを順番に生成
        while (true)
        {
            for (int i = 0; i < ballArray.Length; i++)
            {
                // 1秒間隔で生成
                yield return new WaitForSeconds(1.0f);

                // Prefabをシーンに生成
                Instantiate(ballArray[i], new Vector3(i * 2.0f, 0, 0), Quaternion.identity);
            }
        }
    }
}

3. コードのポイント解説

  • public GameObject[] ballArray;
    • 配列に3種類のPrefabを登録するための変数を用意しています。
  • StartCoroutine("SpawnPrefabs");
    • コルーチンを使って非同期的にPrefabを生成します。
  • yield return new WaitForSeconds(1.0f);
    • 各Prefabを1秒間隔で生成します。
  • Instantiate
    • 指定した位置(例: new Vector3(i * 2.0f, 0, 0))にPrefabを生成します。

コード全体の説明

このスクリプトは、Unityで複数のプレハブ(Prefab)を順番にスポーン(生成)するためのものです。特定の間隔(この場合は1秒ごと)で、ballArrayという配列に含まれているオブジェクトを一つずつ生成します。

各部分の説明

1. using ディレクティブ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
  • using System.Collectionsusing System.Collections.Generic は、コレクション関連のクラスやインターフェースを使うためのものです。
  • using UnityEngine は、Unityの機能を使うためのものです。

2. クラス宣言

public class PrefabSpawner : MonoBehaviour
{
    public GameObject[] ballArray;
  • public class PrefabSpawner : MonoBehaviour は、新しいクラス PrefabSpawner を定義しています。このクラスは MonoBehaviour を継承しています。
  • public GameObject[] ballArray; は、生成するプレハブの配列を定義しています。

3. Start メソッド

void Start()
{
    StartCoroutine("BallSet");
}
  • Start メソッドは、Unityでスクリプトが実行を開始したときに一度だけ呼ばれるメソッドです。
  • StartCoroutine("BallSet"); は、BallSet という名前のコルーチンを開始します。

4. BallSet コルーチン

IEnumerator BallSet()
{
    for (int i = 0; i < ballArray.Length; i++)
    {
        yield return new WaitForSeconds(1.0f);
        GameObject ball = GameObject.Instantiate(ballArray[i]) as GameObject;
    }
}
  • IEnumerator BallSet() は、コルーチンを定義しています。コルーチンは、Unityで時間の経過に伴って実行するための方法です。
  • for (int i = 0; i < ballArray.Length; i++) は、ballArray の長さまでループを実行します。
  • yield return new WaitForSeconds(1.0f); は、次のステップに進む前に1秒間待つことを意味します。
  • GameObject ball = GameObject.Instantiate(ballArray[i]) as GameObject; は、ballArray の中の次のオブジェクトを生成します。

全体の動き

  1. ゲームが開始されると、Start メソッドが呼ばれます。
  2. Start メソッドの中で、BallSet コルーチンが開始されます。
  3. BallSet コルーチンでは、ballArray の各要素について、1秒ごとに順番にオブジェクトを生成します。

4. スクリプトを保存

コードを書き終えたら、Ctrl + S(またはCmd + S)で保存します。

これでスクリプトは完成です!次のステップでは、このスクリプトをUnityで設定して実行します。



Step 3: スクリプトの設定

ここでは、作成したスクリプトをUnityのシーンに設定し、Prefabを順番に生成できるようにします。簡単な手順で進められますので、一緒にやってみましょう!


1. 空のGameObjectを作成

  1. 空のGameObjectを追加
    • Hierarchyウィンドウで右クリック → Create Empty を選択します。
    • 作成したGameObjectに分かりやすい名前(例: PrefabSpawner)をつけます。
  2. 位置のリセット
    • 選択したGameObjectのTransformを確認し、Position(0, 0, 0) にリセットします。
      • 方法: InspectorウィンドウでTransformの横にある をクリック → Reset

2. スクリプトをアタッチ

  1. スクリプトを設定
    • ProjectウィンドウScripts フォルダ内にある PrefabSpawner スクリプトを、Hierarchyウィンドウの PrefabSpawner GameObject にドラッグ&ドロップします。
  2. Inspectorで確認
    • PrefabSpawner GameObjectを選択すると、Inspectorウィンドウにスクリプトが追加されていることを確認できます。

3. Prefabを登録

  1. 配列にPrefabを追加
    • Inspectorウィンドウで、Ball Array フィールドに3つのPrefabをドラッグ&ドロップします。
      • ドロップの順番が生成される順番になります。
      • 例: Sphere1, Sphere2, Sphere3 の順に設定。
  2. 確認
    • Ball Array の右横に サイズ(3) と表示されていることを確認してください。
    • 配列に3つのPrefabが正しく登録されていることを確認します。



Step 4: 動作確認

最後に、作成したスクリプトと設定が正しく動作しているか確認します。以下の手順でチェックを行いましょう。


1. プレイモードの開始

  1. Unityエディターで再生
    • Unityエディター上部の 再生ボタン (▶)をクリックします。
    • シーンがプレイモードに入り、スクリプトが動作を開始します。

2. 動作を確認するポイント

  1. Prefabが順番に生成されることを確認
    • シーン内に、1秒間隔で3種類のSphereが順番に生成されていることを確認してください。
  2. 生成される位置を確認
    • Sphereがコードで指定した位置(例: new Vector3(i * 2.0f, 0, 0))に生成されているか確認します。
    • 必要であれば位置の指定を変更できます。

これで、3種類のSphereが1秒間隔で生成され、順番に切り替わるスクリプトが完成です。もし、何かうまくいかない場合や質問があれば、気軽に聞いてくださいね。



よくある質問

Q
スクリプトが動かないときはどうすればいいですか?
A

以下を確認してください:

  • スクリプトがGameObjectに正しくアタッチされているか。
  • Prefabが Ball Array に正しく登録されているか。
Q
Prefabの生成位置を変えるにはどうしたらいいですか?
A

Instantiate の引数に位置情報を追加します:

Instantiate(ballArray[i], new Vector3(0, i * 2, 0), Quaternion.identity);
Q
もっとたくさんの種類を生成できますか?
A

ballArray の要素数を増やせば対応可能です。

おすすめのアセット

「25 Simple Games for Android and iOS」は、初心者でも簡単に使える25種類のゲームテンプレートがセットになったアセットパックです。このパックには、パズルゲームやアクションゲーム、レースゲームなど、さまざまなジャンルのゲームが含まれており、すぐに利用可能です。