ブロックのプレハブ
Assets/
Scenes/
Arena.unity
Prefabs/
Materials/
すでにあるものこのレッスンで追加
prefab は、保存しておいた GameObject のことです。いくつでも複製できます。元を編集すれば、あらゆるシーンにあるすべてのコピーが自動的に変わります。
Project ウィンドウに prefab が一つ、シーンにインスタンスがたくさん。
ブロックの prefab を作る
- 1
。Transform をリセットし、Position を 0、0.5、0 に設定します。
- 2
なぜ 0.5 なのか?既定の Cube は高さ 1 メートルでピボットが中心にあるため、床の上に半分出る位置になります。
- 3
M_Block という material を作って色を付け、cube にドラッグします。
- 4
cube を Hierarchy から、レッスン 05 で作った Assets/Prefabs フォルダへドラッグします。名前が青に変わったら、それが prefab になった合図です。
- 5
Sphere、Capsule、Cylinder も同じようにします。ブロックの prefab は 4 つあれば十分です。
prefab を編集する
✓ Edit the prefab asset
✖ Edit one instance
Inspector の Overrides ドロップダウンを見れば、何を変えたか分かります。Apply で prefab 側へ反映し、Revert で変更を破棄します。
基底を継承しつつ少し変えたい(グレーの cube から赤の cube を作りたい)ときは、prefab を右クリック → Create → Prefab Variant を使います。
配置时使用スナップ
ドラッグ中に Ctrl(Windows)/ Cmd(Mac)を押すと、決まった刻み単位でスナップ移動します。
刻みは で設定します——ブロック積みなら 1 メートルがちょうど良いです。
V を長押しすると頂点をつかめるようになり、他のオブジェクトの頂点にピタッと合わせられます。
コードから prefab を参照する
using UnityEngine;
public class Spawner : MonoBehaviour
{
[SerializeField] private GameObject blockPrefab; // drag P_Cube here
void Start()
{
// (prefab, position, rotation)
Instantiate(blockPrefab, new Vector3(2f, 0.5f, 3f), Quaternion.identity);
}
}Quaternion.identity は回転なしを意味します。Unity が角度 0、0、0 を表す書き方です。
prefab は Project から(Hierarchy からはドラッグしないでください)Inspector のスロットへドロップします。
よくあるミス
名前が青くならない:Assets/Prefabs にドラッグする代わりに Ctrl+D で cube を複製しています。複製はシーン上のもう一つのオブジェクトであって、アセットではありません。Project ウィンドウへドラッグしたときだけ prefab ができます。
シーン上の cube を赤にしたのに残りの 99 個が灰色のまま:その変更は一つのインスタンスの override です。Overrides ドロップダウンを開いて Apply All するか、prefab モードでアセット自体を編集してください。
アセットではなくシーン上のコピーを Inspector のスロットにドラッグしても、しばらくは動きます。しかし Instantiate はそのインスタンスを override ごと複製し、別のシーンでは参照が null になります。必ず Project ウィンドウからドラッグしてください。