イベントシーケンサー

EventSequencerは、アクションやトリガーの構造化されたシーケンスにライブ、クロスサーバーイベント、カットシーンを構築することができる強力なフレームワークです。 具体的には、このモジュールは以下の事に役立ちます。

  • オーディオ、アニメーション、トゥイーンのスケジュール設定で、構造化されたフレームワークにイベントやカットシーンを構築します。
  • 複数のサーバー間で複数のシーンを遷移し、複雑なアニメーションやビジュアルをタイムラインに同期させます。
  • イベント中をくまなく探し、テストや開発のためにバーチャル空間をプレビューします。

このフレームワークは、トゥエンティ・ワン・パイロッツ24kGoldnのコンサートなどの Roblox イベントや、たくさんの人が訪れる多数のバーチャル空間で実戦テストされています。

 

編集可能な場所でのEventSequencerの動作を表示するには、Roblox Studio のコンサートテンプレートを確認します。 このテンプレートは、開発者がイベント/コンサートを作成し、関連するさまざまな機能やコンポーネントに慣れるための、全体の取り掛かりとしての役割を担っています。

モジュールの使用法

インストール

バーチャル空間でEventSequencerフレームワークを使用する方法

  1. 表示タブから、ツールボックスを開き、マーケットプレイスタブを選択します。

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

  3. DEV モジュールタイルを見つけてクリックします。

  4. イベントシーケンサーモジュールを見つけてクリックするか、3D ビューにドラッグ&ドロップします。

  5. エクスプローラウィンドウで、EventSequencerモデル全体をServerScriptServiceに移動します。 バーチャル空間を実行すると、モジュールはそれ自体をさまざまなサービスに配布し、実行を開始します。

フレームワークモード

置換モード

デフォルトのフレームワークモードは、3D オブジェクト地形照明プロパティ環境エフェクトユーザーインターフェースオブジェクトをシーンの環境 フォルダに配置することで、ユニークなシーンをデザインする置き換え モードです。 TerrainWorkspace内のトップレベルのクラスであるため、生成されたまたは彫刻された地形を特定のシーンの環境/サーバーまたは環境/クライアントフォルダに手動で移動することはできません。

インラインモード

代替のフレームワークモードは、フローまたはイベントのスクリプトロジックで同様に独自のシーンをデザインするインラインモードですが、読み込み時にシーンの環境フォルダからアセットまたはプロパティをクローンするために、既存の3D オブジェクト地形照明プロパティ環境エフェクトユーザーインターフェースオブジェクトを破棄することはありません

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

  1. ServerScriptServiceに配置したEventSequencerフォルダの中で、ReplicatedStorageフォルダ内のインライン値までドリルダウンして選択します。

  2. プロパティウィンドウで、チェックボックスをオンに切り替えます。

シーンの作成

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

すぐに開始できるよう、モジュールのメインフォルダ内に空のシーンがあります。

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

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

時間の長さ

時間の長さは、Studio で直接またはでプログラム的に設定できるTimeLengthという名前のシーンのフォルダに、数字属性Instance:SetAttribute()として定義されます。 時間の長さは、TimeLengthというシーンのフォルダの数値属性 として定義され、Studio で直接設定するか、Instance:SetAttribute()を使ってプログラムで設定することができます。

環境

シーンの環境フォルダには、3D オブジェクト地形照明プロパティ環境エフェクトユーザーインターフェースオブジェクトなど、ユーザーが見たり聞いたりするものがすべて含まれています。 シーンが読み込まれると、それらのオブジェクトやプロパティはClass.Workspace``Class.LightingTerrain、に分配され、既存のオブジェクト/プロパティを置き換えてクローン空間を形成します。

環境フォルダには、以下のコンテナが含まれています。

コンテナ概要
クライアントユーザーインターフェース user interface オブジェクトやアニメーションリグなど、ユーザー(クライアント)がイベントに参加すると読み込むすべてのアセットが含まれています。
PlayerSpawns参加時にユーザーがスポーンするパーツが含まれています。 このフォルダ内の任意のパーツは、SpawnLocationと同様に動作します。
サーバーサーバーでシーンを最初に作成するときに読み込むすべてのアセットが含まれています。 ビジュアルアセットのほとんどをここに備えておくことをお勧めします。
地形シーンの地形が含まれています。
照明属性としてのグローバル照明プロパティ lighting properties 、大気エフェクト atmospheric effects や後処理 post-processing などのモディファイアも含まれます。

イベント

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

クライアント

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

サーバー

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

シーンスキーマ

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

ライフサイクルフック

スキーマのライフサイクルフックでは、シーン操作が発生した時に管理できます。 稼働中のシーンは、通常、最もシンプルなフローで実行されます。

OnSetup
  →
OnRun
 →
OnEndScene

OnRunは、以下のものを検索すると中断される可能性があります。

OnSetup
  →
OnRun
 
seek
OnRun
 
seek
OnRun
 →
OnEndScene

3つのフックは、シーンがリプレイされた場合にも繰り返すことができます。

OnSetup
  →
OnRun
 →
OnEndScene
 
replay
OnSetup
 →
OnRun
 →
OnEndScene

設定

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

シーンの検索

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

単にイベントを楽しむだけのユーザーは時間の流れをコントロールできないため、シーンの検索は誰でもアクセスできるものではありません。 代わりに、イベントのPlaceIdだけでなく、特定のUserIdsおよび/またはグループとその中の役割に基づいて、検索許可を与える必要があります。

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

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

    Script - Set Seeking Permissions

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. setSeekingPermissionsコール内で、以下の表に次のように入力します。

placeIDs検索をサポートするための、カンマで区切られたPlaceId値のリスト。
userIDsサポートされている場所内で検索できるユーザーの、カンマで区切られたUserId値のリスト。
groups各テーブルにグループ group IDと、サポートされている場所で検索できるグループのメンバーの最小ランクが含まれた、カンマで区切られたテーブルのリスト。

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

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

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

  1. Studio の表示メニューから、ツールボックスを開きます。

    Studioのツールボックストグルボタン
  2. マーケットプレイスタブが選択されている状態で、ドロップダウンメニューからプラグインを選択します。

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

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

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

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

シーンの作成で説明されているように、シーンの環境フォルダには、3D オブジェクトなど、ユーザーが見たり聞いたりするものがすべて含まれています。 プラグインは、シーンのアセットをワークスペース内の整理されたフォルダに素早く読み込むのに役立ちます。

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

照明の保存と読み込み

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

  1. トップレベルのLightingサービスで、シーンの照明プロパティ後処理エフェクト、大気エフェクトスカイボックスを構成します。

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

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

クローン化されたインスタンス

保存済みの属性

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

地形の保存と読み込み

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

  1. トップレベルの地形サービスでシーンの地形を構成します。

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

  3. そのシーンの環境/地形フォルダを選択して展開すると、保存された地形を表すTerrainRegionオブジェクトが表示されます。

    地形がシーンに保存されると、プラグインウィンドウから地形をロードをクリックすることで、トップレベルのTerrainサービスに素早く読み込むことができます。

API リファレンス

スキーマライフサイクルフック

OnSetup

OnSetupライフサイクルフックは、OnRunまたはOnEndSceneで参照されるアセットや変数の初期化や、シーンの持続を目的としたconnectionsのセットアップを想定しています。 このフックは、セットアップ時の現在の時刻を読み取ることができる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)")
-- Access scene environments; does not apply to Inline Mode
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Wait for assets
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", 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)")
-- Access scene environment; does not apply to Inline Mode
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end

OnRun

OnRunは、スキーマ内の主要なオペレーションライフサイクルフックです。 オーディオアニメーションの再生から、花火大会のようなイベントのスケジュールまで、シーンのすべての時間設定が含まれている必要があります。

Client Schema

Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Audio playing")
end,
OnEnd = function(self)
print("Audio ended")
end
})
end

OnEndScene

OnEndSceneライフサイクルフックは、OnSetupOnRunで作成され、シーンの間残っている接続を切断するなど、シーンで未解決のものをクリーンアップするのに便利です。

Server Schema

Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end

スキーマ設定

オーディオ

特定の時間にプレイするワークスペースに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("Audio playing")
end,
OnEnd = function(self)
print("Audio ended")
end
})
end

アニメーション

特定の時間にプレイするAnimationを作成します。

設定キー概要
StartTimeシーン持続時間に対してアニメーションを再生する時間(秒)です。
EndTimeシーン持続時間に対してアニメーションを終了する任意の時間(秒)です。
Rigアニメーションを再生するアニメーションリグです。
AnimationId再生するアニメーションのアセットIDです。
Speedアニメーションの再生速度、デフォルトは1です。
FadeInTimeアニメーションをフェードインさせる時間(秒)、デフォルトは0.2(秒)です。
FadeOutTimeアニメーションをフェードアウトさせる時間(秒)、デフォルトは0.2(秒)です。
OnStartアニメーションの再生開始時に起動するカスタム関数です。
OnEndアニメーションの再生終了時に起動するカスタム関数です。
Loopedアニメーションをループさせるかどうか、デフォルトはfalseです。
SyncToAudioオーディオ設定にアニメーションを同期させるかどうかを定義するテーブルです。 以下のキーを承認します。
  • Audioオーディオ設定への参照。
  • 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("Animation playing")
end,
OnEnd = function(self)
print("Animation stopped")
end
})
end

トゥイーン

検索やダイナミックジョインで保存される設定可能なTweenを作成します。 つまり、別の時点でツイーンをチェーンすることができ、すべて期待どおりに再生し、同期する必要があります。

設定キー概要
StartTimesシーン持続時間に対する開始時間のテーブル(秒)です。
Tweenトゥイーンさせるオブジェクトとプロパティを定義するテーブルです。 以下のキーを承認します。
  • Object – トゥイーンさせるオブジェクト。
  • Info – 持続時間、Enum.EasingStyleEnum.EasingDirectionなどを定義するトゥイーンのTweenInfoインスタンス。
  • Properties – トゥイーンのオブジェクトプロパティと関連するターゲット値。
OnStartトゥイーンの再生開始時に起動するカスタム関数です。
OnHeartbeatHeartbeatごとに起動し、第2パラメータとしてトゥイーンアルファを受け取るカスタム関数です。
OnEndトゥイーンの再生終了時に起動するカスタム関数です。
SyncToAudioオーディオ設定にチューニングを同期させるかどうかを定義するテーブルです。 以下のキーを承認します。
  • Audioオーディオ設定への参照。
  • 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("Tween playing")
end,
OnHeartbeat = function(self, alpha)
print("Tween alpha", alpha)
end,
OnEnd = function(self)
print("Tween completed")
end,
})
end

間隔

指定した頻度で、指定した時間(秒)にわたってカスタムコールバック関数を実行します。 ライトの点滅、オーディオの強弱のパルス化など、イベントを繰り返すのに便利です。 最低周波数は 0 秒ですが、技術的には最低周波数は常にHeartbeatにクランプされています。

設定キー概要
StartTimeシーン持続時間に対する間隔時間の開始(秒)です。
EndTimeシーン持続時間に対する間隔時間の終了(秒)です。
FrequencyOnInterval関数が起動される頻度(秒)、最初の実行はStartTimeに開始されます。
OnStart一連の間隔の開始時に起動するカスタム関数です。
OnInterval指定した時間(StartTimeEndTime)内の間隔ごとに起動するカスタム関数です。
OnEnd一連の間隔の終了時に起動するカスタム関数です。
SyncToAudioオーディオ設定に間隔時間を同期させるかどうかを定義するテーブルです。 以下のキーを承認します。
  • Audioオーディオ設定への参照。
  • 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

スケジュール

シーンで花火大会を 2 回スケジュールするなど、同じイベントに対して特定の開始時間を複数定義できる点を除いて、間隔に似ています。

設定キー概要
StartTimesシーン持続時間に対する開始時間のテーブル(秒)です。
OnStartStartTimesテーブル内の指定された時刻ごとに起動するカスタム関数です。
Skippable遅れて参加するユーザーがいる場合や、スケジュールされた開始時間より早くシークする場合に、スケジュールされたイベントをスキップできるかどうかを定義するブール値です。 falseに設定すると、参加/シーク時間前にスケジュールされたすべてのイベント開始時間は、その参加/シーク時間に発生します。 trueに設定すると、参加/シークにスケジュールされた開始時間のみ発生します。 デフォルトはfalseです。
SyncToAudioオーディオ設定にスケジュールを同期させるかどうかを定義するテーブルです。 以下のキーを承認します。
  • Audioオーディオ設定への参照。
  • StartAtAudioTimes – オーディオ持続時間に対してOnStart関数をいつ起動するかを定義する開始時刻のテーブル。
Client Schema

Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Initialize temporary heartbeat connection
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Inform framework of connection
Schema:inform(tempConnection)
end
})
end

通知

OnRunライフサイクルフックで作成されたモジュール、UI オブジェクト、接続などのフレームワークを通知し、シーク時に適切にクリーンアップされるようにします。 ユースケースには、以下が含まれます。

  • RunService.Heartbeatなどの一時的なアドホック接続のフレームワークを通知し、シーンの持続時間の早い時点にシークする際に接続がクリーンアップされるようにします。

    Server Schema

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    OnStart = function(self)
    -- Initialize temporary heartbeat connection
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Inform framework of connection
    Schema:inform(tempConnection)
    end
    })
    end
  • OnRunライフサイクルフック中に、接続やその他の参照を初期化するカスタム「クリーンアップ」関数をModuleScriptで呼び出します。

    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)
    -- Call "init" function in custom module
    customModule.init()
    -- Call "clean" function in custom module on scene cleanup
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - CustomModule

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Initialize heartbeat connection
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Disconnect and clear heartbeat connection
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return CustomModule

関数

loadScene

loadSceneName(sceneName:string, startTime:number?)

sceneNameでシーンをプログラムによって読み込み、startTimeで最初から開始します。 シークが発生し、シーンの再生が開始する前に、サーバーからシーンを読み込むための 5 秒の「猶予時間」があります。 これは、午後 4 時 15 分 00 秒ちょうどにloadScene("[SceneName]", 20)を呼び出すと、フレームワークは要求された 20 秒に加えて 5 秒待ち、午後 4 時 15 分 25 秒にシーンを再生することを意味します。

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Figure out next scene to load when current scene finishes
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" ended; load the first scene in the concert
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" ended; load the second scene in the concert
EventSequencer.loadScene("Track2")
else
-- Loop back to the pre-show scene
EventSequencer.loadScene("PreShow")
end
end)

createSchema

createSchema():table

シーンのロジックを作成するためのシーンスキーマのインスタンスを返します。

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"))
-- Load scene
EventSequencer.loadScene("BeautifulScene")
-- Set warning time to 5 seconds before the scene ends
EventSequencer.setSceneWarningTime(5)
-- Detect when scene is about to end
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)

setSeekingPermissions

setSeekingPermissions(permissions:table)

イベントのPlaceIdや、特定のUserIdsおよび/またはグループとその中の役割に基づいて、権限を求めることを許可します。 詳細については、シーンの検索と切り替えをご覧ください。

getCurrentSceneEnvironment

getCurrentSceneEnvironment():Folder YIELDS

クライアントスキーマスクリプトまたはサーバースキーマスクリプトからそれぞれ呼び出されるかに応じて、現在のシーンのクライアントサイドまたはサーバーサイドの環境フォルダを返します。

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)")
-- Access scene environments; does not apply to Inline Mode
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", 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

現在のシーンのサーバー側環境フォルダを返します。 getCurrentSceneEnvironment とは異なり、クライアントスキーマスクリプトから呼び出すことができます。

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)")
-- Access scene environments; does not apply to Inline Mode
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", 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("Scene loaded")

イベント

onSceneEndingWarningForClient

onSceneEndingWarningForClient(): RBXScriptSignal

シーンが終了する前に、クライアントで起動します。 デフォルトの時間は 3 秒ですが、setSceneWarningTimeで設定できます。 このイベントは、LocalScript内でのみ接続できます

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detect when scene is about to end (client-side)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)

onSceneEndingWarningForServer

onSceneEndingWarningForServer(): RBXScriptSignal

シーンが終了する前に、サーバーで起動します。 デフォルトの時間は 3 秒ですが、setSceneWarningTimeで設定できます。 このイベントには、Script内でのみ接続できます。

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detect when scene is about to end (server-side)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)

onSceneLoadedForClient

onSceneLoadedForClient(): RBXScriptSignal

シーンが開始されると、クライアントで起動します。 このイベントは、LocalScript内でのみ接続できます

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detect when scene is starting (client-side)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)

onOrchestrationFinished

onOrchestrationFinished(): RBXScriptSignal

シーンがその時間の長さに達し、実質的に終了したときにサーバー上で起動します。 このイベントは、終了したばかりのシーンのendedSceneName文字列名引数を受け取り、このイベントをチェーンオフすることで、別のシーンを条件付きで読み込むことができます。 Scriptでのみ接続できます。

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Figure out next scene to load when current scene finishes
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" ended; load the first scene in the concert
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" ended; load the second scene in the concert
EventSequencer.loadScene("Track2")
else
-- Loop back to the pre-show scene
EventSequencer.loadScene("PreShow")
end
end)