プレハブ
このページは自動翻訳されており、誤りが含まれる場合があります。誤りを見つけた場合は「このページを編集」リンクからご協力ください。
プレハブは .prefab ファイルとして保存されたノードツリーで、シーンと同じ形式です。どのシーンもプレハブとして使え、どのプレハブもシーンのように開いて編集できます。違いは使い方だけです。シーンは読み込み、プレハブは既に読み込まれたものの中にインスタンス化します。
プレハブを作る
- Assets パネルでフォルダーを右クリック → New → Scene を選び、例えば
Crateと名付けます。 - ダブルクリックして専用のタブで開きます。
- オブジェクトを組み立てます。Scene Tree でノードを、Inspector でコンポーネントを追加します。別の開いているシーンからノードを持ってくるには Scene Tree の Copy と Paste を使います。
- Ctrl+S で保存します。
コンポーネントからプレハブを参照する
| フィールドの型 | 使う場面 |
|---|---|
AssetReference<Prefab> |
生成したノードツリーだけが必要なとき。 |
PrefabReference<T> |
生成したコピーから特定のコンポーネント T が欲しいとき。 |
Assets パネルから .prefab を Inspector のフィールドにドラッグします。
インスタンス化
public class CrateSpawner : Component
{
public PrefabReference<ModelComponent>? Crate;
public int Count = 5;
public override async void OnStart()
{
var scenes = RuntimeServices.TryGet<ISceneManager>();
if (scenes is null || Crate is null) return;
for (var i = 0; i < Count; i++)
{
var model = await Crate.InstantiateAsync(scenes, Node);
model.Node!.Transform.Position = new Vector3(i * 1.5f, 0, 0);
}
}
}
| 呼び出し | 結果 |
|---|---|
scenes.InstantiateAsync(参照, 親) |
プレハブを読み込み、親(null ならアクティブなシーンのルート)の下にコピーを追加します。コピーのルートノードを返します。 |
scenes.InstantiateAsync(assetId, 親) |
同じ処理をアセット id から行います。 |
prefabReference.InstantiateAsync(scenes, 親) |
同じ処理をして、コピー内で見つかった T コンポーネントを返します。プレハブにない場合は例外を投げます。 |
scenes.InstantiateAsync(コンポーネント, 親) |
シーンに既にあるコンポーネントを持つノードツリーを複製します。 |
コピーのコンポーネントは作成と同時に起動し、シーン内の他のものと同様に次のフレームで開始します。
コピーを取り除く
node.IsActive = false で非アクティブにするか、親の Children から外します — 例えばプールに戻す場合です。
プレハブがまだできないこと
コピーは独立したスナップショットです。Turian 1.0 には、エディターで配置するリンクされたプレハブインスタンス、インスタンスごとのオーバーライド、既存のコピーへのプレハブ変更の伝播はありません。ネストしたプレハブは単純な入れ子として動作します。プレハブは実行時に自身のコンポーネントから他のプレハブをインスタンス化できます。