UnityでPrefabを実行中に取得してインスタンス作成する方法
目次
はじめに
Unityでゲームを作っていると「同じキャラクターやアイテムを何度も生成したい」と思う場面が多くあります。そのときに使うのが Prefab(プレハブ) です。Prefabは「ゲームオブジェクトの設計図」のようなもので、実行中に呼び出して複製(インスタンス化)できます。
この記事では、UnityでPrefabを実行中に取得してインスタンス作成する方法を3つのレベルに分けて解説します。
- Inspectorからアサインする方法(初学者向け・基本形)
- Resources.Loadを使う方法(動的ロード)
- Addressablesを使う方法(実務向け)
1. InspectorからPrefabをアサインして生成する方法
手順
- ProjectビューでPrefabを作成しておきます(例: Player.prefab)。
- スクリプトに public または [SerializeField] フィールドを用意します。
- InspectorにPrefabをドラッグ&ドロップしてアサインします。
- Instantiateメソッドで生成します。
コード例
using UnityEngine;
public class Example : MonoBehaviour
{
[SerializeField] GameObject prefab; // Inspectorからアサイン
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// プレイヤーの位置にPrefabを生成
Instantiate(prefab, transform.position, Quaternion.identity);
}
}
}
メリット / デメリット
✅ 簡単に使える。初心者に最適。
❌ 事前にInspectorでアサインが必要。
2. Resources.Loadで実行時にPrefabをロードする方法
手順
- Assets フォルダに Resources フォルダを作成します。
- その中にPrefabを入れます(例: Assets/Resources/MyPrefab.prefab)。
- Resources.Loadで文字列指定してPrefabをロードします。
コード例
using UnityEngine;
public class Example : MonoBehaviour
{
void Start()
{
// "Assets/Resources/MyPrefab.prefab" をロード
GameObject prefab = Resources.Load<GameObject>("MyPrefab");
Instantiate(prefab, new Vector3(0, 0, 0), Quaternion.identity);
}
}
メリット / デメリット
✅ コードから自由にPrefabを取得できる。
❌ Resourcesは大規模プロジェクトでは非推奨。管理が難しい。
3. Addressablesを使う方法(推奨・大規模向け)
Unity公式が推奨しているアセット管理方法です。大規模プロジェクトやオンライン配信に向いています。
手順
- Package Managerから Addressables をインストール。
- Prefabを右クリック → Addressables → Make Addressable を選択。
- スクリプトからアドレス指定で呼び出します。
コード例
using UnityEngine;
using UnityEngine.AddressableAssets;
public class Example : MonoBehaviour
{
[SerializeField] AssetReference prefabReference;
void Start()
{
// 非同期でインスタンス生成
prefabReference.InstantiateAsync(Vector3.zero, Quaternion.identity);
}
}
メリット / デメリット
✅ シーンやアセットバンドルをまたいでロード可能。
✅ モバイルやオンラインゲーム向けに最適。
❌ 初学者にはやや複雑。
まとめ
- 小規模・学習用途 → Inspectorからアサインして Instantiate
- 実行時に柔軟にロードしたい → Resources.Load
- 実務・大規模開発 → Addressables
👉 学習の流れとしては、まず Inspectorでのアサイン → Resources.Load → Addressables の順に進めるのがおすすめです。
訪問数 5 回, 今日の訪問数 5回
ディスカッション
コメント一覧
まだ、コメントがありません