イベントシーケンサー

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

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

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

このフレームワークは、Twenty One Pilots24kGoldnのコンサートなど、Robloxイベントで実績があり、多くの訪問者がいるゲームでも使用されています。

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

モジュールの使用

インストール

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

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

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

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

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

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

フレームワークモード

置き換えモード

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

インラインモード

代替のフレームワークモードはインラインモードで、スクリプトロジックを使用して独自のシーンを設計しますが、フレームワークは既存の3Dオブジェクト地形照明プロパティ環境効果、およびユーザーインターフェイスオブジェクトを破壊せずに、シーンの環境フォルダーからアセット/プロパティをクローンします。

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

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

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

シーンの作成

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

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

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

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

時間の長さ

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

環境

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

環境フォルダーには、次のコンテナが含まれています:

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

イベント

シーンのイベントフォルダーは、クライアントサーバーモジュール間で通信するRemoteEventsのプレースホルダーです。このフォルダーに何かを配置することは必須ではありません。

クライアント

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

サーバー

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

シーンスキーマ

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

ライフサイクルフック

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

OnRunは、シーク時に中断される可能性があります:

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

構成

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

シーンのシーク

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

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

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

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

    スクリプト - シーク権限の設定
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. setSeekingPermissions呼び出し内の次のテーブルを次のように記入します:

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

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

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

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

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

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

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

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

  5. プラグインがインストールされると、Studioのプラグインタブに表示されます。

シーンの読み込みとアンロード

シーンの作成で説明したように、シーンの環境フォルダーには、ユーザーが見るものや聞くものがすべて含まれています。プラグインは、シーンのアセットをワークスペース内の整理されたフォルダーに迅速に読み込むのを助けます。

プラグインアクション説明
クライアントを読み込むシーンのクライアントコンテンツがアンロードされている場合、環境/クライアントフォルダーをワークスペース/シーンクライアントフォルダーに移動します。
サーバーを読み込むシーンのサーバーコンテンツがアンロードされている場合、環境/サーバーフォルダーをワークスペース/シーンサーバーフォルダーに移動します。
クライアントをアンロードシーンのクライアントコンテンツが読み込まれている場合、ワークスペース/シーンクライアントからクライアントフォルダーを**[シーン]**/環境フォルダーに戻します。
サーバーをアンロードシーンのサーバーコンテンツが読み込まれている場合、ワークスペース/シーンサーバーからサーバーフォルダーを**[シーン]**/環境フォルダーに戻します。
すべてのシーンをアンロードすべての読み込まれたシーンのクライアントおよびサーバーフォルダーをその環境フォルダーに戻します。

照明の保存と読み込み

最上位のLightingサービスは、場所のすべての照明プロパティと視覚効果を保存します。これは最上位のサービスであるため、特定のシーンの環境/サーバーまたは環境/クライアントフォルダーに手動で移動することはできません。代わりに、プラグインを利用して、そのプロパティと子をシーンの環境/照明フォルダーにコピーできます。

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

  2. シーンマネージャープラグインウィンドウで、目的のシーンの照明を保存をクリックします。

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

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

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

地形の保存と読み込み

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

  1. 最上位のTerrainサービスを通じて、シーンの地形を設定します。

  2. シーンマネージャープラグインウィンドウで、目的のシーンの地形を保存をクリックします。

  3. そのシーンの環境/地形フォルダーを選択して展開すると、保存された地形を表す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)
end
サーバースキーマ
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 (サーバー)")
-- シーン環境にアクセスします。インラインモードには適用されません
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("現在の時間は:", timePositionObject.Value)
end

OnRun

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
})
end

OnEndScene

OnEndSceneライフサイクルフックは、シーン内の未処理のものをクリーンアップするのに役立ちます。たとえば、OnSetupOnRunで作成された接続を切断するなどです。

サーバースキーマ
Schema.OnEndScene = function()
print("OnEndScene (サーバー)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end

スキーマ構成

audio

特定の時間に再生されるSoundオブジェクトをワークスペースに作成します。シーンが終了した後、またはSoundオブジェクトの再生が終了した後に、サウンドは削除されます。

構成 キー説明
StartTimeシーンの期間に関連してオーディオを再生する時刻(秒単位)。
SoundId再生するオーディオのアセットID。
OnStartオーディオの再生が始まったときに発火するカスタム関数。
OnEndオーディオの再生が終了したときに発火するカスタム関数。
VolumeSoundオブジェクトの音量。デフォルトは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
})
end

animate

特定の時間に再生されるAnimationを作成します。

構成 キー説明
StartTimeシーンの期間に関連してアニメーションを再生する時刻(秒単位)。
EndTimeアニメーションを終了するオプションの時間(シーンの期間に関連して、秒単位)。
Rigアニメーションを再生するアニメーションリグ。
AnimationId再生するアニメーションのアセットID。
Speedアニメーションの再生速度。デフォルトは1です。
FadeInTimeアニメーションのフェードインにかかる時間(秒単位)。デフォルトは0.2(秒)です。
FadeOutTimeアニメーションのフェードアウトにかかる時間(秒単位)。デフォルトは0.2(秒)です。
OnStartアニメーションの再生が始まったときに発火するカスタム関数。
OnEndアニメーションの再生が終了したときに発火するカスタム関数。
Loopedアニメーションをループするかどうか。デフォルトはfalseです。
SyncToAudioアニメーションをオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
  • Audioオーディオ構成への参照。
  • StartAtAudioTime – オーディオの期間に関連してアニメーションを再生する時刻。
  • EndAtAudioTime – オーディオの期間に関連してアニメーションを終了するオプションの時間。
クライアントスキーマ
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
})
end

tween

構成可能なTweenを作成します。これはシークと動的参加で保持され、異なる時間にツイーンをチェーンでき、すべてが期待通りに再生されて同期します。

構成 キー説明
StartTimesシーンの期間に関連する開始時間のテーブル(秒単位)。
Tweenツイーンするオブジェクトとプロパティを定義するテーブル。次のキーを受け入れます:
  • Object – ツイーンするオブジェクト。
  • Info – ツイーンの持続時間、Enum.EasingStyleEnum.EasingDirectionなどを定義するTweenInfoインスタンス。
  • Properties – ツイーンのターゲット値を持つオブジェクトプロパティ。
OnStartツイーンが再生を開始したときに発火するカスタム関数。
OnHeartbeatHeartbeatの毎回発火するカスタム関数。ツイーンのアルファを2番目のパラメーターとして受け取ります。
OnEndツイーンが再生を終了したときに発火するカスタム関数。
SyncToAudioツイーンをオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
  • Audioオーディオ構成への参照。
  • StartAtAudioTimes – オーディオの期間に関連してツイーンを再生する時刻を定義する開始時間のテーブル。
クライアントスキーマ
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,
})
end

interval

指定された期間に指定された頻度でカスタムコールバック関数を実行します。点滅するライトやオーディオの強度をパルスさせるなどの繰り返しイベントに便利です。最低可能な頻度は0秒ですが、技術的には最小頻度は常にHeartbeatに制約されます。

構成 キー説明
StartTimeシーンの期間に関連してインターバルの開始時刻(秒単位)。
EndTimeインターバルの終了時刻(シーンの期間に関連して、秒単位)。
FrequencyOnInterval関数が発火する頻度(秒単位)。最初の実行はStartTimeで行われます。
OnStartインターバルのシリーズが始まったときに発火するカスタム関数。
OnInterval指定された期間内の各インターバルで発火するカスタム関数(StartTimeからEndTimeまで)。
OnEndインターバルのシリーズが終了したときに発火するカスタム関数。
SyncToAudioインターバルの期間をオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
  • Audioオーディオ構成への参照。
  • StartAtAudioTime – オーディオの期間に関連してインターバルの期間を開始する時刻。
  • EndAtAudioTime – オーディオの期間に関連してインターバルの期間を終了するオプションの時間。
クライアントスキーマ
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,
})
end

schedule

intervalに似ていますが、同じイベントの複数の特定の開始時間を定義できます。たとえば、シーン内で花火の表示を2回スケジュールすることができます。

構成 キー説明
StartTimesシーンの期間に関連する開始時間のテーブル(秒単位)。
OnStartStartTimesテーブル内の各指定された時間に発火するカスタム関数。
Skippableスケジュールされたイベントが遅れて参加したユーザーや、スケジュールされた開始時間の前にシークした場合にスキップできるかどうかを定義するブール値。falseに設定すると、参加/シーク時間の前にスケジュールされたすべてのイベント開始時間がその参加/シーク時間で発生します。trueに設定すると、参加/シークの後にスケジュールされた開始時間のみが発生します。デフォルトはfalseです。
SyncToAudioスケジュールをオーディオ構成に同期させるかどうかを定義するテーブル。次のキーを受け入れます:
  • Audioオーディオ構成への参照。
  • StartAtAudioTimes – オーディオの期間に関連してOnStart関数を発火させる時刻を定義する開始時間のテーブル。
クライアントスキーマ
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
})
end

inform

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
    })
    end
  • OnRunライフサイクルフック内で接続や他の参照を初期化する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,
    })
    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秒の「猶予期間」があります。これは、正確に午後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 (クライアント)")
end

seek

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)
end
サーバースキーマ
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 (サーバー)")
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
end

getCurrentServerEnvironmentFromClient

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)
end

isLoadingScene

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

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

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