シーンのインスタンス化

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

すべてのシーンはプレハブでもあります。.prefab ファイルは単独で開いて編集できるノードツリーで、別のシーンに何度でも配置できます。敵、アイテム、部屋を一度作れば、ゲームが必要とする場所に生成できます。

プレハブを参照する

コンポーネントに AssetReference<Prefab> 型のフィールドを持たせます。生成したコピーから特定のコンポーネントが欲しい場合は PrefabReference<T> を使います:

namespace Usercode;

public class Spawner : Component
{
    public AssetReference<Prefab>? Enemy;
    public PrefabReference<LightComponent>? Lamp;
}

Inspector で、Assets パネルから .prefab ファイルをフィールドにドラッグします。

実行時の生成

インスタンス化はシーンマネージャーを通して行います。スクリプトは RuntimeServices から取得します:

public class Spawner : Component
{
    public AssetReference<Prefab>? Enemy;
    public PrefabReference<LightComponent>? Lamp;
    ISceneManager? scenes;

    public override void OnAwake() => scenes = RuntimeServices.TryGet<ISceneManager>();

    public override async void OnStart()
    {
        if (scenes is null || Enemy is null || Lamp is null) return;

        // このノードの下にコピーを追加。null を渡すとアクティブなシーンのルートに追加。
        var enemy = await scenes.InstantiateAsync(Enemy, Node);
        enemy.Transform.Position = new Vector3(2, 0, 0);

        // コピー内で見つかった LightComponent を返す。
        var lamp = await Lamp.InstantiateAsync(scenes);
        lamp.Intensity = 3f;
    }
}
  • InstantiateAsync(参照, 親) はプレハブを読み込んでコピーし、親 の下に、親 が null ならアクティブなシーンのルートに追加します。
  • PrefabReference<T>.InstantiateAsync(scenes) は同じ処理をして、コピーの T コンポーネントを返します。
  • InstantiateAsync(コンポーネント) は、シーンに既にあるコンポーネントを持つ階層を複製します。

各コピーは独立しています。生成後に変更しても、プレハブや他のコピーには影響しません。

プレハブの編集

Assets パネルで .prefab をダブルクリックすると専用のタブで開きます。変更して保存すれば、それ以降に生成するコピーに反映されます。開いているシーン間でノードを移すには、Scene Tree の Copy と Paste を使います。

まだ利用できない機能

エディターで配置するリンクされたプレハブインスタンス、インスタンスごとのオーバーライド、ネストしたプレハブの変更の伝播は Turian 1.0 には含まれません。現在のインスタンス化は、実行時に作られるコピーです。


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