イベントシーケンサー

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

EventSequencer は、構造化されたアクションとトリガーのシーケンスに基づいて、ライブのクロスサーバーイベントとカットシーンを構築できる強力なフレームワークです。具体的には、このモジュールを使用して以下を行うことができます:

  • 音声、アニメーション、およびツイーンのスケジュール設定を通じて、構造化されたフレームワーク上にイベントやカットシーンを構築する。
  • 複数のサーバー間で複数のシーンに渡って移行し、複雑なアニメーションやビジュアルをタイムラインに同期させる。
  • イベントをシークし、テストや開発の目的で体験をプレビューする。

このフレームワークは、Twenty One Pilots24kGoldn のコンサートや、多くの訪問者が殺到する体験のために実績を持っています。

EventSequencer を編集可能な場所で動作させるには、Roblox Studio の コンサート テンプレートをチェックしてください。このテンプレートは、開発者がイベントやコンサートを作成し、様々な機能やコンポーネントに慣れるための包括的な出発点です。

モジュールの使用

インストール

EventSequencer フレームワークを体験で使用するには:

  1. Studio の ウィンドウ メニューまたは ホーム タブツールバーから、ツールボックスを開き、クリエイターストア タブを選択します。

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

  3. パッケージ タイルを見つけてクリックします。

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

  5. エクスプローラー ウィンドウで、全体の EventSequencer モデルを ServerScriptService に移動します。体験を実行すると、モジュールが実行され始めます。

フレームワークモード

置き換えモード

デフォルトのフレームワークモードは 置き換えモード であり、ユーザーインターフェースオブジェクト、3D オブジェクト地形照明プロパティ環境効果をシーンの Environment フォルダーに配置することでユニークな シーン を設計できます。シーンが読み込まれると、そのオブジェクトとプロパティは WorkspaceTerrain、および Lighting に分配され、既存のオブジェクト/プロパティが 置き換えられ てクローンされた空間を形成します。

インラインモード

代替のフレームワークモードは インラインモード であり、同様にフロー/イベントのスクリプトロジックを用いてユニークな シーン を設計しますが、フレームワークは 既存の 3D オブジェクト地形照明プロパティ環境効果、およびユーザーインターフェースオブジェクトを削除せずに、シーンの Environment フォルダーからの資産/プロパティをクローンします。

インラインモードを有効にするには:

  1. ServerScriptService に配置した EventSequencer モデル内で、 ReplicatedStorage フォルダー内の Inline 値を選択します。

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

シーンの作成

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

すぐに始めるには、モジュールのメインフォルダー内にある空のシーンを見つけることができます:

  1. EventSequencer フォルダーを展開し、 BlankScene フォルダーを見つけます。

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

時間の長さ

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

環境

シーンの Environment フォルダーには、ユーザーが見るものや聞くものがすべて含まれています。これには、3D オブジェクト地形照明プロパティ環境効果、およびユーザーインターフェースオブジェクトが含まれます。シーンが読み込まれると、それらのオブジェクトとプロパティは WorkspaceTerrain、および Lighting に分配され、既存のオブジェクト/プロパティが置き換えられ、新しくクローンされたスペースを形成します。

Environment フォルダーには、以下のコンテナが含まれています:

コンテナ説明
Clientイベントに参加したユーザー(クライアント)が参加するときに読み込むすべての資産を含みます。これにはユーザーインターフェースオブジェクトやアニメーションリグが含まれます。
PlayerSpawnsユーザーが参加するときにスポーンする部分を含みます。このフォルダー内の任意の部分は SpawnLocation に似た動作をします。
Serverサーバー上でシーンが最初に作成されるときに読み込むすべての資産を含みます。ほとんどのビジュアル資産はここに配置することをお勧めします。
Terrainシーンの地形を含みます。
Lightingグローバル 照明プロパティ を属性として含むほか、大気効果ポストプロセッシング 効果などの修飾詞を含みます。

イベント

シーンの Events フォルダーは、ClientServer モジュール間で通信する RemoteEvents のための placeholder です。このフォルダーに何かを配置することは必須ではありません。

クライアント

このスクリプトは、クライアント上での schema ロジックを実行します。

サーバー

このスクリプトは、サーバー上での schema ロジックを実行します。

シーンスキーマ

シーンの スキーマ は、シーンのタイムラインのどの地点で何が起こるかを定義します。シーンのスキーマは、Client および Server モジュールの両方で定義し、ライフサイクルフック を含めて 構成 が発生するタイミングを管理する必要があります。

ライフサイクルフック

スキーマの ライフサイクルフック を使用すると、シーン操作が発生するタイミングを管理できます。本番中のシーンは、通常、最も単純なフローで実行されます:

OnRun はシーク中に中断されることがあります:

すべてのフックは、シーンがリプレイされる場合も繰り返すことができます:

構成

スキーマの 構成 は、シーンのコア操作を定義します。例えば、00:32 に 音声 を再生したり、その音声と同期させる アニメーション をキューに入れたり、花火ショーのような シーンイベント をスケジュールしたりします。各構成は、最初のパラメータ (self) が構成インスタンスである特定のコールバック関数をサポートしています。

シーンのシーク

EventSequencer のユニークな特徴は、ビデオをシークするようにシーンを「シーク」できることです。置き換えモード では、シーン間を切り替えて、実稼働前に全体のマルチシーンイベントをプレビューすることもできます。

シーンのシークはすべての人にアクセスできるわけではありません。イベントを楽しむユーザーは、その時間の流れを制御できるべきではありません。代わりに、イベントの PlaceId と特定の UserIds、および/または グループ およびその内部の役割に基づいて、シークの権限を付与する必要があります。

  1. ServerScriptService 内に新しい Script を作成します。

  2. 新しいスクリプトに以下のコードを貼り付けます。

    Script - シーク権限の設定

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. setSeekingPermissions コール内で以下のテーブルを記入します。

    placeIDsシークをサポートする PlaceId 値のカンマ区切りリストです。
    userIDsサポートされる場所内でシークできるユーザーのカンマ区切りリストです。
    groupsテーブルのカンマ区切りリスト。各テーブルには、サポートされる場所内でシークできるそのグループのメンバーの最小ランクを含む グループ ID が含まれます。

シーンマネージャープラグイン

シーンマネージャー プラグインは、シーン、照明、および 地形 を読み込んだりアンロードしたりするのに便利なツールです。インラインモードを使用していない限り、このプラグインを使用してシーンオブジェクトとプロパティを手動で配置/編集する代わりに使用することを強くお勧めします。

プラグインをインストールするには:

  1. Studio の ウィンドウ メニューまたは ホーム タブツールバーから、ツールボックス を開きます。

  2. クリエイターストア タブが選択されている状態で、ドロップダウンメニューから プラグイン を選択します。

  3. 検索フィールドに シーンマネージャー と入力し、Enter キーを押してプラグインを見つけます。

  4. プラグインのアイコンをクリックして詳細を表示し、インストール ボタンをクリックします。

  5. プラグインがインストールされると、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 フォルダーにコピーできます。

  1. 最上位の Lighting サービスを介して、シーンの 照明プロパティポストプロセッシング 効果、大気効果、および スカイボックス を構成します。

  2. シーンマネージャー プラグインウィンドウで、希望するシーンの Save Lighting をクリックします。

  3. そのシーンの Environment/Lighting 設定を選択して展開すると、同じ照明プロパティがフォルダーの 属性 として表示され、最上位の Lighting サービスのクローンされた子が表示されます。

    クローンされたインスタンス
    保存された属性

    シーンの照明プロパティと子が保存されると、プラグインウィンドウから Load Lighting をクリックすることで、すぐに最上位の Lighting サービスに戻すことができます。

地形の保存と読み込み

TerrainWorkspace 内の最上位クラスであるため、生成されたまたは彫刻された地形を特定のシーンの Environment/Server または Environment/Client フォルダーに手動で移動することはできません。代わりに、プラグインを利用して、シーンの Environment/Terrain フォルダーにコピーできます。

  1. 最上位の Terrain サービスを介してシーンの地形を構成します。

  2. シーンマネージャー プラグインウィンドウで、希望するシーンの Save Terrain をクリックします。

  3. そのシーンの 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

OnRunschema 内の主要な操作ライフサイクルフックです。これは、シーンのすべてのタイミングの 構成 を含む必要があります。音声 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音声の再生が終了すると発火するカスタム関数。
VolumeSound オブジェクトの音量。デフォルトは 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 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れる:
  • Audioaudio 構成への参照。
  • StartAtAudioTime – 音声の持続時間に関連してアニメーションを再生するタイミング。
  • EndAtAudioTime – 音声の持続時間に関連してアニメーションを終了させる任意の時間。
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ツイーンするオブジェクトおよびプロパティを定義するテーブル。次のキーを受け入れる:
  • Object – ツイーンするオブジェクト。
  • Info – ツイーンのインスタンス (TweenInfo) で、期間、Enum.EasingStyleEnum.EasingDirection などを定義します。
  • Properties – ツイーンの対象値を持つオブジェクトプロパティ。
OnStartツイーンが再生され始めると発火するカスタム関数。
OnHeartbeatすべての Heartbeat で発火するカスタム関数。ツイーンの増加率を二番目のパラメータとして受け取ります。
OnEndツイーンの再生が終了すると発火するカスタム関数。
SyncToAudioツイーンを audio 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
  • Audioaudio 構成への参照。
  • StartAtAudioTimes – 音声の持続時間に関連してツイーンを再生するタイミングを定義する開始時間のテーブル。
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シーンの持続時間に関連して、インターバルの終了時間(秒単位)。
FrequencyOnInterval 関数を発火させる頻度(秒単位)。最初の実行は StartTime です。
OnStartインターバルの一連のものが開始されると発火するカスタム関数。
OnInterval指定された持続期間内で毎回発火するカスタム関数(StartTime から EndTime まで)。
OnEndインターバの一連のものの最後に発火するカスタム関数。
SyncToAudioインターバルの持続時間を audio 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れる:
  • Audioaudio 構成への参照。
  • StartAtAudioTime – 音声の持続時間に関連してインターバルの持続時間を開始するタイミング。
  • EndAtAudioTime – 音声の持続時間に関連してインターバルの持続時間を終了させる任意の時間。
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 構成に同期させるかどうかを定義するテーブル。次のキーを受け入れている:
  • Audioaudio 構成への参照。
  • StartAtAudioTimes – 音声の持続時間に関して OnStart 関数を発火させるタイミングを定義する開始時間のテーブル。
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 Schema

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    OnStart = function(self)
    -- 一時的なハートビート接続を初期化
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- フレームワークに接続を通知
    Schema:inform(tempConnection)
    end
    })
    end
  • ModuleScript のカスタム「クリーンアップ」関数を呼び出し、OnRun ライフサイクルフック中に接続または他の参照を初期化します。

    Server Schema

    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 (Server)")
    Schema:schedule({
    StartTimes = {5},
    OnStart = function(self)
    -- カスタムモジュールの "init" 関数を呼び出します
    customModule.init()
    -- シーンクリーンアップ時にカスタムモジュールの "clean" 関数を呼び出します
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - CustomModule

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- ハートビート接続を初期化
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- ハートビート接続を切断し、クリアします
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return 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 値(秒単位)にシークします。

Script

local 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

シーンが現在読み込まれているかどうかをサーバーから確認します。

Script

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 でのみ接続できます。

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)
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。