ラージシーン
Fusionでは、複数のシーンを同時にロード/アンロードすることができます。各load_scene()はスロットインデックスを返し、unload_scene(index)に渡すことでその特定スロットを解放できます。このページでは単一のシーンのケースを取り扱っていますが、2つのシーンをロードして個別に切り替える方法についてはmulti_sceneデモを参照してください。
多くのマルチプレイヤーフレームワークは、動的に生成されるオブジェクト(プレイヤーのアクションによって実行時に生成されるエンティティ)のみを扱います。しかし大抵のゲームには、初めからシーン内に静的なワールド要素(ドア・スイッチ・エレベーター・アイテムなど)が存在し、それらもクライアント間で状態を同期する必要があります。
Fusionはこれらを「シーンオブジェクト」としてサポートします。スポーンされるオブジェクトとは異なり、シーンオブジェクトはFusionSpawnerを必要としません。これらはノード名からネットワークIDを決定論的に生成するため、すべてのクライアントがスポーンメッセージなしで識別可能です。このページでは、事前配置されたネットワークノードを含むシーンの読み込みと登録方法について説明します。
概要
ラージシーンには、数十~数千の事前配置されたネットワークノード(ドア・エレベーター・アイテムなど)が含まれており、それぞれがFusionSharedReplicatorを持っています。その一方で単純なシーンは、単一のFusionSharedReplicatorがすべてのレプリケーションを処理します。
これらのシーンオブジェクトは、ノード名から生成された決定論的なIDを使用していて、FusionSpawnerは不要です。FusionSpawnerにバインドされていないFusionSharedReplicatorは、notify_scene_ready()でツリーをスキャンする際にシーンオブジェクトとして扱われます。
Scene Loading Mode
読み込みモードは、Fusionで自動的に処理させたいか、カスタム読み込みロジック(プログレスバー・ストリーミングなど)が必要かで選択してください。
- Auto (
SCENE_LOAD_AUTO) -Fusionがシーンを読み込み、それを親として内部的にシーンオブジェクトを登録します - Custom (
SCENE_LOAD_CUSTOM) -Fusionがscene_load_requestedを発火した後、手動でシーンを読み込んでnotify_scene_ready()を呼び出します
Autoモードのセットアップ
Autoモードでは、Fusionが内部的にシーンを読み込んで親オブジェクトに設定するため、手動のツリー管理は不要です。
GDScript
const ArenaScene = preload("res://maps/arena.tscn")
func _ready():
Fusion.set_scene_load_mode(Fusion.SCENE_LOAD_AUTO)
Fusion.set_scene_parent(self)
Fusion.scene_ready.connect(func(idx): print("Scene objects synced: ", idx))
func start_game():
Fusion.load_scene(ArenaScene) # master client only
Customモードのセットアップ
シーンの読み込み方法を細かく制御したい場合(例:ロード画面表示・サブシーンのストリーミング)は、Customモードを使用してください。
GDScript
func _ready():
Fusion.set_scene_load_mode(Fusion.SCENE_LOAD_CUSTOM)
Fusion.scene_load_requested.connect(_on_load)
func _on_load(index: int, scene: PackedScene):
var instance = scene.instantiate()
add_child(instance)
Fusion.notify_scene_ready(instance, index)
シーン構造
同期が必要な各ノードはFusionSharedReplicatorを持ち、下部パネルからカスタムプロパティが設定されています。

同期が必要なノードにはFusionReplicatorを追加し、下部パネルからカスタムプロパティを設定します。
シーン内でノード名は一意である必要があります。
ノード名のハッシュから決定論的なIDが生成されるため、重複があると衝突します。
途中参加したクライアントは、サーバーのキャッシュから現在の状態を自動的に受信します。
Back to top