本文へスキップ
BecomeCoder

C#実践コース · 第8章 Unity開発 · レッスン49

プレハブとInstantiate

ローカル実施

導入

弾・敵・アイテムのように「同じものを実行中に何度も生成」したいとき、プレハブ(設計図として保存したGameObject)をInstantiateで複製します。「クラスオブジェクト」の、Unity版です。

図解

flowchart LR
    PF["プレハブ『弾』<br/>(設計図)"] -->|Instantiate| B1["弾インスタンス1"]
    PF -->|Instantiate| B2["弾インスタンス2"]
    PF -->|Instantiate| B3["弾インスタンス3"]
    style PF fill:#e1f5fe

サンプル(Unity C# ― 読み物)

using UnityEngine;

public class Gun : MonoBehaviour
{
    // Inspector でプレハブ(弾)を割り当てる
    public GameObject bulletPrefab;

    void Update()
    {
        // スペースキーで弾を1発生成
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // プレハブから実体を複製(位置・回転を指定)
            Instantiate(bulletPrefab, transform.position, Quaternion.identity);
        }
    }
}
  • プレハブは「設定済みGameObjectを設計図として保存したもの」
  • Instantiate(プレハブ, 位置, 回転)で複製(=newのUnity版)
  • Input.GetKeyDown(KeyCode.Space)は「押した瞬間」に1回だけtrue(GetKeyは押している間ずっと)
  • 生成しっぱなしだと増え続けるので、弾は一定時間でDestroyするのが定石

Unityで試す

  • 弾用のGameObjectを作ってプレハブ化し、GunスクリプトのbulletPrefabに割り当てる
  • 再生してスペースキーで弾が生成されることを確認
  • 生成した弾に「数秒後に自分をDestroyする」スクリプトを付けて、増え続けないようにする

まとめ

  • プレハブは再利用可能なGameObjectの設計図
  • Instantiateで複製(newのUnity版)、Destroyで破棄
  • GetKeyDownは押した瞬間、GetKeyは押している間

次回: Unityでの設計——データとロジックの分離です。