プレハブ

このページは自動翻訳されており、誤りが含まれる場合があります。誤りを見つけた場合は「このページを編集」リンクからご協力ください。

プレハブは .prefab ファイルとして保存されたノードツリーで、シーンと同じ形式です。どのシーンもプレハブとして使え、どのプレハブもシーンのように開いて編集できます。違いは使い方だけです。シーンは読み込み、プレハブは既に読み込まれたものの中にインスタンス化します。

プレハブを作る

  1. Assets パネルでフォルダーを右クリック → New → Scene を選び、例えば Crate と名付けます。
  2. ダブルクリックして専用のタブで開きます。
  3. オブジェクトを組み立てます。Scene Tree でノードを、Inspector でコンポーネントを追加します。別の開いているシーンからノードを持ってくるには Scene Tree の Copy と Paste を使います。
  4. 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 には、エディターで配置するリンクされたプレハブインスタンス、インスタンスごとのオーバーライド、既存のコピーへのプレハブ変更の伝播はありません。ネストしたプレハブは単純な入れ子として動作します。プレハブは実行時に自身のコンポーネントから他のプレハブをインスタンス化できます。


← すべてのドキュメント このページを編集