シーンのインスタンス化
このページは自動翻訳されており、誤りが含まれる場合があります。誤りを見つけた場合は「このページを編集」リンクからご協力ください。
すべてのシーンはプレハブでもあります。.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 には含まれません。現在のインスタンス化は、実行時に作られるコピーです。