EventSequencer は、構造化されたアクションとトリガーのシーケンスに基づいて、ライブのクロスサーバーイベントとカットシーンを構築できる強力なフレームワークです。具体的には、このモジュールを使用して以下を行うことができます:
- 音声、アニメーション、およびツイーンのスケジュール設定を通じて、構造化されたフレームワーク上にイベントやカットシーンを構築する。
- 複数のサーバー間で複数のシーンに渡って移行し、複雑なアニメーションやビジュアルをタイムラインに同期させる。
- イベントをシークし、テストや開発の目的で体験をプレビューする。
このフレームワークは、Twenty One Pilots や 24kGoldn のコンサートや、多くの訪問者が殺到する体験のために実績を持っています。
EventSequencer を編集可能な場所で動作させるには、Roblox Studio の コンサート テンプレートをチェックしてください。このテンプレートは、開発者がイベントやコンサートを作成し、様々な機能やコンポーネントに慣れるための包括的な出発点です。

モジュールの使用
インストール
EventSequencer フレームワークを体験で使用するには:
Studio の ウィンドウ メニューまたは ホーム タブツールバーから、ツールボックスを開き、クリエイターストア タブを選択します。

モデル のソートが選択されていることを確認し、カテゴリ の すべて表示 ボタンをクリックします。

パッケージ タイルを見つけてクリックします。
Event Sequencer モジュールを見つけてクリックするか、3D ビューにドラッグアンドドロップします。

エクスプローラー ウィンドウで、全体の EventSequencer モデルを ServerScriptService に移動します。体験を実行すると、モジュールが実行され始めます。
フレームワークモード
置き換えモード
デフォルトのフレームワークモードは 置き換えモード であり、ユーザーインターフェースオブジェクト、3D オブジェクト、地形、照明プロパティ、環境効果をシーンの Environment フォルダーに配置することでユニークな シーン を設計できます。シーンが読み込まれると、そのオブジェクトとプロパティは Workspace、Terrain、および Lighting に分配され、既存のオブジェクト/プロパティが 置き換えられ てクローンされた空間を形成します。
インラインモード
代替のフレームワークモードは インラインモード であり、同様にフロー/イベントのスクリプトロジックを用いてユニークな シーン を設計しますが、フレームワークは 既存の 3D オブジェクト、地形、照明プロパティ、環境効果、およびユーザーインターフェースオブジェクトを削除せずに、シーンの Environment フォルダーからの資産/プロパティをクローンします。
インラインモードを有効にするには:
ServerScriptService に配置した EventSequencer モデル内で、 ReplicatedStorage フォルダー内の Inline 値を選択します。

プロパティ ウィンドウで Value チェックボックスをオンにします。

シーンの作成
シーン は、全体のイベントやカットシーンの一部であり、一連のフォルダーにまとめられています。各シーンにはその流れ/イベントを定義するスクリプトロジックが含まれ、シーンは独自の 3D オブジェクト、地形、照明プロパティ、環境効果、およびユーザーインターフェースオブジェクトを保存できます。
すぐに始めるには、モジュールのメインフォルダー内にある空のシーンを見つけることができます:
EventSequencer フォルダーを展開し、 BlankScene フォルダーを見つけます。

全体の BlankScene フォルダーを ReplicatedStorage に移動またはコピーします。

時間の長さ
各シーンは、映画やコンサートの設定された時間のように、その持続時間を定義する 時間の長さ を持っている必要があります。この時間の長さは、TimeLength という名前のシーンのフォルダー内の数値 属性 として定義され、Studio 内で直接設定するか、Instance:SetAttribute() を使用してプログラム matically に設定できます。


環境
シーンの Environment フォルダーには、ユーザーが見るものや聞くものがすべて含まれています。これには、3D オブジェクト、地形、照明プロパティ、環境効果、およびユーザーインターフェースオブジェクトが含まれます。シーンが読み込まれると、それらのオブジェクトとプロパティは Workspace、Terrain、および Lighting に分配され、既存のオブジェクト/プロパティが置き換えられ、新しくクローンされたスペースを形成します。
Environment フォルダーには、以下のコンテナが含まれています:
| コンテナ | 説明 |
|---|---|
| Client | イベントに参加したユーザー(クライアント)が参加するときに読み込むすべての資産を含みます。これにはユーザーインターフェースオブジェクトやアニメーションリグが含まれます。 |
| PlayerSpawns | ユーザーが参加するときにスポーンする部分を含みます。このフォルダー内の任意の部分は SpawnLocation に似た動作をします。 |
| Server | サーバー上でシーンが最初に作成されるときに読み込むすべての資産を含みます。ほとんどのビジュアル資産はここに配置することをお勧めします。 |
| Terrain | シーンの地形を含みます。 |
| Lighting | グローバル 照明プロパティ を属性として含むほか、大気効果 や ポストプロセッシング 効果などの修飾詞を含みます。 |
イベント
シーンの Events フォルダーは、Client と Server モジュール間で通信する RemoteEvents のための placeholder です。このフォルダーに何かを配置することは必須ではありません。
クライアント
このスクリプトは、クライアント上での schema ロジックを実行します。
サーバー
このスクリプトは、サーバー上での schema ロジックを実行します。
シーンスキーマ
シーンの スキーマ は、シーンのタイムラインのどの地点で何が起こるかを定義します。シーンのスキーマは、Client および Server モジュールの両方で定義し、ライフサイクルフック を含めて 構成 が発生するタイミングを管理する必要があります。
ライフサイクルフック
スキーマの ライフサイクルフック を使用すると、シーン操作が発生するタイミングを管理できます。本番中のシーンは、通常、最も単純なフローで実行されます:
OnRun はシーク中に中断されることがあります:
すべてのフックは、シーンがリプレイされる場合も繰り返すことができます:
構成
スキーマの 構成 は、シーンのコア操作を定義します。例えば、00:32 に 音声 を再生したり、その音声と同期させる アニメーション をキューに入れたり、花火ショーのような シーンイベント をスケジュールしたりします。各構成は、最初のパラメータ (self) が構成インスタンスである特定のコールバック関数をサポートしています。
シーンのシーク
EventSequencer のユニークな特徴は、ビデオをシークするようにシーンを「シーク」できることです。置き換えモード では、シーン間を切り替えて、実稼働前に全体のマルチシーンイベントをプレビューすることもできます。
シーンのシークはすべての人にアクセスできるわけではありません。イベントを楽しむユーザーは、その時間の流れを制御できるべきではありません。代わりに、イベントの PlaceId と特定の UserIds、および/または グループ およびその内部の役割に基づいて、シークの権限を付与する必要があります。
ServerScriptService 内に新しい Script を作成します。
新しいスクリプトに以下のコードを貼り付けます。
Script - シーク権限の設定local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})setSeekingPermissions コール内で以下のテーブルを記入します。
シーンマネージャープラグイン
シーンマネージャー プラグインは、シーン、照明、および 地形 を読み込んだりアンロードしたりするのに便利なツールです。インラインモードを使用していない限り、このプラグインを使用してシーンオブジェクトとプロパティを手動で配置/編集する代わりに使用することを強くお勧めします。
プラグインをインストールするには:
Studio の ウィンドウ メニューまたは ホーム タブツールバーから、ツールボックス を開きます。
クリエイターストア タブが選択されている状態で、ドロップダウンメニューから プラグイン を選択します。
検索フィールドに シーンマネージャー と入力し、Enter キーを押してプラグインを見つけます。

プラグインのアイコンをクリックして詳細を表示し、インストール ボタンをクリックします。
プラグインがインストールされると、Studio の プラグイン タブに表示されます。
シーンの読み込みとアンロード
シーンの作成 で説明されているように、シーンの Environment フォルダーには、ユーザーが見るものや聞くものがすべて含まれています。プラグインを使用すると、シーンの資産をワークスペース内の整理されたフォルダーに簡単に読み込みまたはアンロードできます。
| プラグインアクション | 説明 |
|---|---|
| クライアントを読み込む | シーンのクライアントコンテンツがアンロードされている場合、その Environment/Client フォルダーを Workspace/ScenesClient フォルダーに移動します。 |
| サーバーを読み込む | シーンのサーバーコンテンツがアンロードされている場合、その Environment/Server フォルダーを Workspace/ScenesServer フォルダーに移動します。 |
| クライアントをアンロードする | シーンのクライアントコンテンツが読み込まれている場合、Workspace/ScenesClient からその Client フォルダーを [Scene]/Environment フォルダーに戻します。 |
| サーバーをアンロードする | シーンのサーバーコンテンツが読み込まれている場合、Workspace/ScenesServer からその Server フォルダーを [Scene]/Environment フォルダーに戻します。 |
| すべてのシーンをアンロードする | 読み込まれたすべてのシーンの Client および Server フォルダーを Environment フォルダーに戻します。 |
照明の保存と読み込み
最上位の Lighting サービスは、場所のすべての照明プロパティと視覚効果を保存します。これは最上位のサービスであるため、特定のシーンの Environment/Server または Environment/Client フォルダーに手動で移動することはできません。代わりに、プラグインを利用して、そのプロパティと子をシーンの Environment/Lighting フォルダーにコピーできます。
最上位の Lighting サービスを介して、シーンの 照明プロパティ、ポストプロセッシング 効果、大気効果、および スカイボックス を構成します。

シーンマネージャー プラグインウィンドウで、希望するシーンの Save Lighting をクリックします。
地形の保存と読み込み
Terrain は Workspace 内の最上位クラスであるため、生成されたまたは彫刻された地形を特定のシーンの Environment/Server または Environment/Client フォルダーに手動で移動することはできません。代わりに、プラグインを利用して、シーンの Environment/Terrain フォルダーにコピーできます。
最上位の Terrain サービスを介してシーンの地形を構成します。

シーンマネージャー プラグインウィンドウで、希望するシーンの Save Terrain をクリックします。
そのシーンの Environment/Terrain フォルダーを選択して展開すると、保存された地形を表す TerrainRegion オブジェクトが表示されます。

シーンの地形が保存されると、プラグインウィンドウから Load Terrain をクリックすることで、すぐに最上位の Terrain サービスに戻すことができます。
API 参照
スキーマライフサイクルフック
OnSetup
OnSetup ライフサイクルフックは、OnRun または OnEndScene で参照される資産や変数の初期化に使用され、シーンの持続時間中に持続する接続 (RBXScriptSignal:Connect() など) を設定することを目的としています。このフックは timePositionObject パラメータを受け取り、セットアップ時の現在の時間を読み取ることができます。
Client Schema
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
local dummy
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- シーン環境にアクセスします。インラインモードには適用されません
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- 資産を待つ
dummy = clientEnvironment:WaitForChild("Dummy")
print("現在の時間は:", timePositionObject.Value)
end
Server Schema
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Server)")
-- シーン環境にアクセスします。インラインモードには適用されません
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("現在の時間は:", timePositionObject.Value)
end
OnRun
OnRun は schema 内の主要な操作ライフサイクルフックです。これは、シーンのすべてのタイミングの 構成 を含む必要があります。音声 audio の再生や、アニメーション animate の再生、イベントスケジュール schedule のような映像を表示することが含まれます。
Client Schema
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("音声再生中")
end,
OnEnd = function(self)
print("音声終了")
end
})
end
OnEndScene
OnEndScene ライフサイクルフックは、シーンでの未処理のすべてのものをクリーンアップするのに便利です。例えば、シーンの持続期間の間に残る OnSetup または OnRun で作成された接続の切断などが含まれます。
Server Schema
Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
スキーマ構成
audio
特定の時間に、ワークスペース内で Sound オブジェクトを作成します。この音は、シーンが終了した後や、 Sound オブジェクトが再生を終了した後に削除されます。
| 構成キー | 説明 |
|---|---|
| StartTime | シーンの持続時間に関連して、音声を再生するタイミング(秒単位)。 |
| SoundId | 再生する音声の資産 ID。 |
| OnStart | 音声の再生が開始されると発火するカスタム関数。 |
| OnEnd | 音声の再生が終了すると発火するカスタム関数。 |
| Volume | Sound オブジェクトの音量。デフォルトは 0.5。 |
Client Schema
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("音声再生中")
end,
OnEnd = function(self)
print("音声終了")
end
})
end
animate
特定の時間に Animation を作成します。
| 構成キー | 説明 |
|---|---|
| StartTime | シーンの持続時間に関連してアニメーションを再生するタイミング(秒単位)。 |
| EndTime | 任意の時間、アニメーションを終了させるタイミング(シーンの持続時間に関連して、秒単位)。 |
| Rig | アニメーションを播放するアニメーションリグ。 |
| AnimationId | 再生するアニメーションの資産 ID。 |
| Speed | アニメーションの再生速度。デフォルトは 1。 |
| FadeInTime | アニメーションをフェードインさせるまでの時間(秒単位)。デフォルトは 0.2(秒)。 |
| FadeOutTime | アニメーションをフェードアウトさせるまでの時間(秒単位)。デフォルトは 0.2(秒)。 |
| OnStart | アニメーションの再生が開始されると発火するカスタム関数。 |
| OnEnd | アニメーションの再生が終了すると発火するカスタム関数。 |
| Looped | アニメーションをループさせるかどうか。デフォルトは false。 |
| SyncToAudio | アニメーションを audio 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れる:
|
Client Schema
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local DanceAnimation = Schema:animate({
AnimationId = "rbxassetid://3695333486",
Rig = Dummy,
Speed = 1,
FadeInTime = 0.1,
FadeOutTime = 0.3,
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTime = 5,
},
OnStart = function(self)
print("アニメーション再生中")
end,
OnEnd = function(self)
print("アニメーション停止")
end
})
end
tween
様々に設定可能な Tween を作成します。これはシークと動的な参加で保存され、時間の異なるポイントでツイーンを連結でき、すべてが正常に再生されて同期されることを意味します。
| 構成キー | 説明 |
|---|---|
| StartTimes | シーンの持続時間に関連する開始時間のテーブル(秒単位)。 |
| Tween | ツイーンするオブジェクトおよびプロパティを定義するテーブル。次のキーを受け入れる:
|
| OnStart | ツイーンが再生され始めると発火するカスタム関数。 |
| OnHeartbeat | すべての Heartbeat で発火するカスタム関数。ツイーンの増加率を二番目のパラメータとして受け取ります。 |
| OnEnd | ツイーンの再生が終了すると発火するカスタム関数。 |
| SyncToAudio | ツイーンを audio 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
|
Client Schema
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local LightFadeOut = Schema:tween({
StartTimes = {29.884},
Tween = {
Object = game:GetService("Lighting"),
Info = TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.Out),
Properties = {
Brightness = 0,
}
},
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTimes = {5, 7.2, 9.4, 11.6},
},
OnStart = function(self)
print("ツイーン再生中")
end,
OnHeartbeat = function(self, alpha)
print("ツイーンの増加率", alpha)
end,
OnEnd = function(self)
print("ツイーン完了")
end,
})
end
interval
指定された期間にわたり、指定された頻度でカスタムコールバック関数を実行します(秒単位)。チカチカするライトや、音声の強度を脈打つなど、繰り返しイベントに役立ちます。最低頻度は 0 秒ですが、技術的には常に最小頻度は Heartbeat に制限されます。
| 構成キー | 説明 |
|---|---|
| StartTime | シーンの持続時間に関連して、インターバルの開始時間(秒単位)。 |
| EndTime | シーンの持続時間に関連して、インターバルの終了時間(秒単位)。 |
| Frequency | OnInterval 関数を発火させる頻度(秒単位)。最初の実行は StartTime です。 |
| OnStart | インターバルの一連のものが開始されると発火するカスタム関数。 |
| OnInterval | 指定された持続期間内で毎回発火するカスタム関数(StartTime から EndTime まで)。 |
| OnEnd | インターバの一連のものの最後に発火するカスタム関数。 |
| SyncToAudio | インターバルの持続時間を audio 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れる:
|
Client Schema
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local ClientTimerUpdate = Schema:interval({
Frequency = 1,
SyncToAudio = {
StartAtAudioTime = 2.5,
EndAtAudioTime = 10,
Audio = MainAudio
},
OnInterval = function(self)
print(MainAudio.Sound.TimePosition, MainAudio.CurrentSoundIntensityRatio)
end,
})
end
schedule
interval に似ていますが、同じイベントのために複数の特定の開始時間を定義することができます。例えば、シーン内で今回の花火ショーを 2 回スケジュールすることができます。
| 構成キー | 説明 |
|---|---|
| StartTimes | シーンの持続時間に関連する開始時間のテーブル(秒単位)。 |
| OnStart | 指定された StartTimes テーブル内のすべての指定された時間で発火するカスタム関数。 |
| Skippable | スケジュールされたイベントが、遅れて参加するユーザーや、スケジュールされた開始時間の前にシークしたユーザーによってスキップできるかどうかを定義するブール値。これを false に設定すると、参加/シーク時間の前にスケジュールされたすべてのイベント開始時間は、その参加/シーク時間で発生します。 true に設定すると、参加/シーク後にスケジュールされた開始時間のみが発生します。デフォルトは false です。 |
| SyncToAudio | スケジュールを audio 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れている:
|
Client Schema
Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- 一時的なハートビート接続を初期化
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- フレームワークに接続を通知
Schema:inform(tempConnection)
end
})
end
inform
スキーマの OnRun ライフサイクルフック内で作成されるモジュール、UI オブジェクト、接続などをフレームワークに通知し、シークの際に適切にクリーンナップされるようにします。使用例には以下が含まれます:
一時的なアドホック接続を RunService.Heartbeat に通知し、その接続がシークの際に軽くなり、シーンの持続時間の早い地点に接続が切断されることを通知します。
Server SchemaSchema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- 一時的なハートビート接続を初期化local tempConnection = RunService.Heartbeat:Connect(function()end)-- フレームワークに接続を通知Schema:inform(tempConnection)end})endModuleScript のカスタム「クリーンアップ」関数を呼び出し、OnRun ライフサイクルフック中に接続または他の参照を初期化します。
Server Schemalocal ReplicatedStorage = game:GetService("ReplicatedStorage")local RunService = game:GetService("RunService")local customModule = require(ReplicatedStorage:WaitForChild("CustomModule"))local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))local Schema = EventSequencer.createSchema()Schema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- カスタムモジュールの "init" 関数を呼び出しますcustomModule.init()-- シーンクリーンアップ時にカスタムモジュールの "clean" 関数を呼び出しますSchema:inform(customModule, customModule.clean)end,})endModuleScript - CustomModulelocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- ハートビート接続を初期化CustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- ハートビート接続を切断し、クリアしますif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
関数
loadScene
loadScene(sceneName: string, startTime: number ?)
プログラムでシーンを sceneName によって読み込み、startTime から始めます。シーンがサーバーから読み込まれるまでの「猶予期間」として 5 秒の時間があります。これにより、 loadScene("[SceneName]", 20) をちょうど午後 4:15:00 に呼び出すと、フレームワークは要求された 20 に加えて 5 秒待ち、午後 4:15:25 にシーンが開始されます。
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- 現在のシーンが終了した際に読み込む次のシーンを判断
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" が終了した; コンサートの最初のシーンを読み込む
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" が終了した; コンサートの二番目のシーンを読み込む
EventSequencer.loadScene("Track2")
else
-- プレショーシーンに戻る
EventSequencer.loadScene("PreShow")
end
end)
createSchema
createSchema(): table
シーンの schema のインスタンスを返し、シーンのロジックを作成します。
Client Schema
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
end
seek
seek(time: number)
現在読み込まれているシーンの先頭から time 値(秒単位)にシークします。
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
setSceneWarningTime
setSceneWarningTime(endSceneTimeWindow: number)
警告が送信されるすべてのシーンの 終了 の時間を設定します。警告は、onSceneEndingWarningForClient のクライアント側で、または onSceneEndingWarningForServer のサーバー側で検出できます。
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンを読み込む
EventSequencer.loadScene("BeautifulScene")
-- シーンが終了する 5 秒前に警告時間を設定します
EventSequencer.setSceneWarningTime(5)
-- シーンが終了しようとすると検出します
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("シーンが終了しようとしています!")
end)
setSeekingPermissions
setSeekingPermissions(permissions: table)
イベントの PlaceId と特定の UserIds および/または グループ とその内部の役割に基づいてシーク許可を付与します。詳細については seek and switch scenes を参照してください。
getCurrentSceneEnvironment
getCurrentSceneEnvironment(): Folder (YIELDS)
現在のシーンのクライアント側またはサーバー側の Environment フォルダーを返します。これは、Client スキーマスクリプトまたは Server スキーマスクリプトから呼び出された場合によります。
Client Schema
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- シーン環境にアクセスします。インラインモードには適用されません
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("現在の時間は:", timePositionObject.Value)
end
Server Schema
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Server)")
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
end
getCurrentServerEnvironmentFromClient
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
現在のシーンの サーバー側 Environment フォルダーを返します。 getCurrentSceneEnvironment とは異なり、これを Client スキーマスクリプトから呼び出すことができます。
Client Schema
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- シーン環境にアクセスします。インラインモードには適用されません
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("現在の時間は:", timePositionObject.Value)
end
isLoadingScene
isLoadingScene(): boolean
シーンが現在読み込まれているかどうかをサーバーから確認します。
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("シーンが読み込まれました")
イベント
onSceneEndingWarningForClient
シーンが終了しそうなときに、クライアント上で発火します。デフォルトの時間は 3 秒ですが、これは setSceneWarningTime を使用して構成できます。このイベントは LocalScript でのみ接続できます。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが終了しそうなときに検出します(クライアント側)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("シーンが終了しそうです!")
end)
onSceneEndingWarningForServer
シーンが終了しそうなときに、サーバー上で発火します。デフォルトの時間は 3 秒ですが、これは setSceneWarningTime を使用して構成できます。このイベントは Script でのみ接続できます。
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが終了しそうなときに検出します(サーバー側)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("シーンが終了しそうです!")
end)
onSceneLoadedForClient
シーンが開始すると、クライアント上で発火します。このイベントは LocalScript でのみ接続できます。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが開始すると検出します(クライアント側)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("シーンが開始しています!")
end)
onOrchestrationFinished
シーンがその 時間の長さ に達し、実質的に終了したときにサーバー上で発火します。このイベントには、終了したシーンの名前を文字列として持つ endedSceneName 引数が与えられます。このイベントから条件に応じて load another scene を呼ぶことができます。これは Script でのみ接続できます。
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- 現在のシーンが終了した際に次に読み込むシーンを判断
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" が終了した; コンサートの最初のシーンを読み込む
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" が終了した; コンサートの二番目のシーンを読み込む
EventSequencer.loadScene("Track2")
else
-- プレショーシーンに戻る
EventSequencer.loadScene("PreShow")
end
end)-- "Track1" が終了しました; コンサートの2番目のシーンを読み込む
EventSequencer.loadScene("Track2")
else
-- プレショーシーンに戻る
EventSequencer.loadScene("PreShow")
end
end)

