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

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

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

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

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

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

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

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

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


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

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

シーンマネージャープラグインウィンドウで、目的のシーンの照明を保存をクリックします。
地形の保存と読み込み
TerrainはWorkspace内の最上位クラスであるため、生成されたり彫刻された地形を特定のシーンの環境/サーバーまたは環境/クライアントフォルダーに手動で移動することはできません。代わりに、プラグインを利用して、シーンの環境/地形フォルダーにコピーできます。
最上位のTerrainサービスを通じて、シーンの地形を設定します。

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

シーンの地形が保存されると、プラグインウィンドウから地形を読み込むをクリックすることで、最上位のTerrainサービスに迅速に戻すことができます。
APIリファレンス
スキーマライフサイクルフック
OnSetup
OnSetupライフサイクルフックは、OnRunまたはOnEndSceneで参照されるアセットや変数を初期化するために使用されます。シーンの期間中に持続することを意図した接続を設定するなどです。このフックは、セットアップ時の現在の時間を読み取ることができるtimePositionObjectパラメーターを受け取ります。
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 (クライアント)")
-- シーン環境にアクセスします。インラインモードには適用されません
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- アセットを待機
dummy = clientEnvironment:WaitForChild("Dummy")
print("現在の時間は:", timePositionObject.Value)
endlocal 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 (サーバー)")
-- シーン環境にアクセスします。インラインモードには適用されません
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("現在の時間は:", timePositionObject.Value)
endOnRun
OnRunは、スキーマ内の主要な操作ライフサイクルフックです。オーディオやアニメーションの再生から、花火のようなイベントのスケジュールまで、シーンのすべてのタイミングされた構成を含む必要があります。
Schema.OnRun = function()
print("OnRun (クライアント)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("オーディオ再生中")
end,
OnEnd = function(self)
print("オーディオ終了")
end
})
endOnEndScene
OnEndSceneライフサイクルフックは、シーン内の未処理のものをクリーンアップするのに役立ちます。たとえば、OnSetupやOnRunで作成された接続を切断するなどです。
Schema.OnEndScene = function()
print("OnEndScene (サーバー)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
endスキーマ構成
audio
特定の時間に再生されるSoundオブジェクトをワークスペースに作成します。シーンが終了した後、またはSoundオブジェクトの再生が終了した後に、サウンドは削除されます。
| 構成 キー | 説明 |
|---|---|
| StartTime | シーンの期間に関連してオーディオを再生する時刻(秒単位)。 |
| SoundId | 再生するオーディオのアセットID。 |
| OnStart | オーディオの再生が始まったときに発火するカスタム関数。 |
| OnEnd | オーディオの再生が終了したときに発火するカスタム関数。 |
| Volume | Soundオブジェクトの音量。デフォルトは0.5です。 |
Schema.OnRun = function()
print("OnRun (クライアント)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("オーディオ再生中")
end,
OnEnd = function(self)
print("オーディオ終了")
end
})
endanimate
特定の時間に再生されるAnimationを作成します。
| 構成 キー | 説明 |
|---|---|
| StartTime | シーンの期間に関連してアニメーションを再生する時刻(秒単位)。 |
| EndTime | アニメーションを終了するオプションの時間(シーンの期間に関連して、秒単位)。 |
| Rig | アニメーションを再生するアニメーションリグ。 |
| AnimationId | 再生するアニメーションのアセットID。 |
| Speed | アニメーションの再生速度。デフォルトは1です。 |
| FadeInTime | アニメーションのフェードインにかかる時間(秒単位)。デフォルトは0.2(秒)です。 |
| FadeOutTime | アニメーションのフェードアウトにかかる時間(秒単位)。デフォルトは0.2(秒)です。 |
| OnStart | アニメーションの再生が始まったときに発火するカスタム関数。 |
| OnEnd | アニメーションの再生が終了したときに発火するカスタム関数。 |
| Looped | アニメーションをループするかどうか。デフォルトはfalseです。 |
| SyncToAudio | アニメーションをオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
|
Schema.OnRun = function()
print("OnRun (クライアント)")
local MainAudio = Schema:audio({
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
})
endtween
構成可能なTweenを作成します。これはシークと動的参加で保持され、異なる時間にツイーンをチェーンでき、すべてが期待通りに再生されて同期します。
| 構成 キー | 説明 |
|---|---|
| StartTimes | シーンの期間に関連する開始時間のテーブル(秒単位)。 |
| Tween | ツイーンするオブジェクトとプロパティを定義するテーブル。次のキーを受け入れます:
|
| OnStart | ツイーンが再生を開始したときに発火するカスタム関数。 |
| OnHeartbeat | Heartbeatの毎回発火するカスタム関数。ツイーンのアルファを2番目のパラメーターとして受け取ります。 |
| OnEnd | ツイーンが再生を終了したときに発火するカスタム関数。 |
| SyncToAudio | ツイーンをオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
|
Schema.OnRun = function()
print("OnRun (クライアント)")
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,
})
endinterval
指定された期間に指定された頻度でカスタムコールバック関数を実行します。点滅するライトやオーディオの強度をパルスさせるなどの繰り返しイベントに便利です。最低可能な頻度は0秒ですが、技術的には最小頻度は常にHeartbeatに制約されます。
| 構成 キー | 説明 |
|---|---|
| StartTime | シーンの期間に関連してインターバルの開始時刻(秒単位)。 |
| EndTime | インターバルの終了時刻(シーンの期間に関連して、秒単位)。 |
| Frequency | OnInterval関数が発火する頻度(秒単位)。最初の実行はStartTimeで行われます。 |
| OnStart | インターバルのシリーズが始まったときに発火するカスタム関数。 |
| OnInterval | 指定された期間内の各インターバルで発火するカスタム関数(StartTimeからEndTimeまで)。 |
| OnEnd | インターバルのシリーズが終了したときに発火するカスタム関数。 |
| SyncToAudio | インターバルの期間をオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
|
Schema.OnRun = function()
print("OnRun (クライアント)")
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,
})
endschedule
intervalに似ていますが、同じイベントの複数の特定の開始時間を定義できます。たとえば、シーン内で花火の表示を2回スケジュールすることができます。
| 構成 キー | 説明 |
|---|---|
| StartTimes | シーンの期間に関連する開始時間のテーブル(秒単位)。 |
| OnStart | StartTimesテーブル内の各指定された時間に発火するカスタム関数。 |
| Skippable | スケジュールされたイベントが遅れて参加したユーザーや、スケジュールされた開始時間の前にシークした場合にスキップできるかどうかを定義するブール値。falseに設定すると、参加/シーク時間の前にスケジュールされたすべてのイベント開始時間がその参加/シーク時間で発生します。trueに設定すると、参加/シークの後にスケジュールされた開始時間のみが発生します。デフォルトはfalseです。 |
| SyncToAudio | スケジュールをオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
|
Schema.OnRun = function()
print("OnRun (クライアント)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- 一時的なハートビート接続を初期化
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- フレームワークに接続を通知
Schema:inform(tempConnection)
end
})
endinform
OnRunライフサイクルフック内で作成されたモジュール、UIオブジェクト、接続などをフレームワークに通知します。これにより、シーク時に適切にクリーンアップされることが保証されます。使用例には次のものがあります:
RunService.Heartbeatのような一時的なアドホック接続をフレームワークに通知し、シーンの期間の早い時点にシークしたときに接続がクリーンアップされるようにします。
サーバースキーマSchema.OnRun = function()print("OnRun (サーバー)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- 一時的なハートビート接続を初期化local tempConnection = RunService.Heartbeat:Connect(function()end)-- フレームワークに接続を通知Schema:inform(tempConnection)end})endOnRunライフサイクルフック内で接続や他の参照を初期化するModuleScript内のカスタム「クリーンアップ」関数を呼び出します。
サーバースキーマlocal 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 (サーバー)")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秒の「猶予期間」があります。これは、正確に午後4時15分にloadScene("[SceneName]", 20)を呼び出すと、フレームワークは要求された20秒に加えて5秒待機し、午後4時15分25秒にシーンを開始します。
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"が終了しました。コンサートの2番目のシーンを読み込みます。
EventSequencer.loadScene("Track2")
else
-- プレショーシーンに戻ります。
EventSequencer.loadScene("PreShow")
end
end)createSchema
createSchema(): table
シーンのスキーマのインスタンスを返し、シーンのロジックを作成します。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (クライアント)")
endseek
seek(time: number)
現在読み込まれているシーンの開始からtime値(秒単位)にシークします。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
EventSequencer.seek(95.58)setSceneWarningTime
setSceneWarningTime(endSceneTimeWindow: number)
警告が送信されるすべてのシーンの終了からの時間を設定します。警告は、onSceneEndingWarningForClientを介してクライアント側で、またはonSceneEndingWarningForServerを介してサーバー側で検出できます。
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、および/またはグループとその中の役割に基づいてシーク権限を付与します。詳細については、シークとシーンの切り替えを参照してください。
getCurrentSceneEnvironment
getCurrentSceneEnvironment(): Folder (YIELDS)
現在のシーンのクライアント側またはサーバー側の環境フォルダーを返します。これは、クライアントスキーマスクリプトまたはサーバースキーマスクリプトから呼び出された場合に応じて異なります。
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 (クライアント)")
-- シーン環境にアクセスします。インラインモードには適用されません
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("現在の時間は:", timePositionObject.Value)
endlocal 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 (サーバー)")
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
endgetCurrentServerEnvironmentFromClient
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
現在のシーンのサーバー側環境フォルダーを返します。getCurrentSceneEnvironmentとは異なり、クライアントスキーマスクリプトから呼び出すことができます。
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 (クライアント)")
-- シーン環境にアクセスします。インラインモードには適用されません
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("現在の時間は:", timePositionObject.Value)
endisLoadingScene
isLoadingScene(): boolean
シーンが現在読み込まれているかどうかを知るためにサーバーから呼び出されます。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
print(EventSequencer.isLoadingScene())
while EventSequencer.isLoadingScene() do
task.wait()
end
print("シーンが読み込まれました")イベント
onSceneEndingWarningForClient
シーンが終了しようとしている前にクライアントで発火します。デフォルトの時間は3秒ですが、setSceneWarningTimeを介して構成できます。このイベントは、LocalScript内でのみ接続できます。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが終了しようとしているとき(クライアント側)を検出
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("シーンが終了しようとしています!")
end)onSceneEndingWarningForServer
シーンが終了しようとしている前にサーバーで発火します。デフォルトの時間は3秒ですが、setSceneWarningTimeを介して構成できます。このイベントは、Script内でのみ接続できます。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが終了しようとしているとき(サーバー側)を検出
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("シーンが終了しようとしています!")
end)onSceneLoadedForClient
シーンが開始するときにクライアントで発火します。このイベントは、LocalScript内でのみ接続できます。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが開始するとき(クライアント側)を検出
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("シーンが開始します!")
end)onOrchestrationFinished
シーンがその時間の長さに達し、実際に終了したときにサーバーで発火します。このイベントは、終了したシーンの名前を示すendedSceneName文字列引数を受け取り、このイベントから条件に応じて別のシーンを読み込むことができます。このイベントは、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" が終了しました; コンサートの2番目のシーンを読み込みます
EventSequencer.loadScene("Track2")
else
-- プレショーシーンに戻ります
EventSequencer.loadScene("PreShow")
end
end)
