イベントシーケンサー

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

イベントシーケンサー は、構造化されたアクションとトリガーの順序の上でライブでクロスサーバーのイベントとカットシーンを構築できる強力なフレームワークです。より具体的には、このモジュールはあなたを助けます:

  • オーディオ、アニメーション、およびティーンのスケジュール構成を通じて構造化されたフレームワーク上にイベントまたはカットシーンをビルドします。
  • 複数のサーバー間の複数のシーンの移行、複雑なアニメーションとビジュアルをタイムラインに同期する
  • イベントを通じて検索し、テストと開発の目的で体験をプレビューします。

このフレームワークは、Twenty One Pilots24kGoldn のコンサートのような Roblox イベントや、多くの訪問者が多い経験でバトルテストされてきました。

編集可能な場プレース内で イベントシーケンサー をアクションで見るには、Roblox Studio の コンサート テンプレートをチェックしてください。このテンプレートは、開発者がイベント/コンサートを作成し、関連するさまざまな機能とコンポーネントを熟知するための包括的なスタート地点です。

モジュールの使用

インストール

エクスペリエンスで イベントシーケンサー フレームワークを使用するには:

  1. から ビューツールボックス を開き、 クリエイターストア タブを選択します。

    Toolbox toggle button in Studio
  2. モデル の順序が選択されていることを確認し、 すべて表示 ボタンをクリックして、 カテゴリ を選択します。

  3. ロケートしてクリックして 開発モジュール タイル。

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

  5. エクスプローラー ウィンドウで、 イベントシーケンサー モデル全体を ServerScriptService に移動します。エクスペリエンスを実行すると、モジュールは複数のサービスに分配され、実行を開始します。

フレームワークモード

モードを置換

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

インラインモード

代替のフレームワークモードは、 インラインモード で、スクリプトロジックでフロー/イベントのユニークなシーン を設計しますが、フレームワークは、 既存の 3Dオブジェクト地形照明プロパティ環境効果、およびユーザーインターフェイスオブジェクトをクローンするために、ロード時に環境フォルダから場の 3D環境 フォルダにアクセスします。

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

  1. サーバースクリプトサービス に配置した イベントシーケンサー モデルの内部で、ドリルダウンして インライン 値を ReplicatedStorage フォルダ内に選択します。

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

シーンを作成

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

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

  1. イベントシーケンサー フォルダを拡張し、 ブランクシーン フォルダを見つけます。

  2. すべての ブランクシーン フォルダを ReplicatedStorage に移動またはコピーします。

時間長

各シーンには 時間長 、秒単位で、期間を定義する必要があります。映画やコンサートのように、期間が設定されています。時間長は、スタジオで直接設定できる場景のフォルダ TimeLength に数字属性として定義され、プログラマティックに TimeLength を通じて設定できます。

環境

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

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

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

イベント

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

クライバー

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

サーバー

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

シーンスキーマ

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

ライフサイクルホック

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

OnRun は、検索中に中断される可能性があります:

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

構成

スキーマ 設定 は、例えば、00:32 にオーディオを再生し、そのオーディオとシンクする アニメーション をキューに置き、花火ショーのようなシーンイベントをスケジュールするなど、シーンのコア操作を定義します。すべての設定は、最初のパラメータ ( self ) が構成インスタンスの場合、特定の呼び出し機能をサポートします。

シーンを検索

イベントシーケンサー のユニークな機能は、ビデオを通じて検索できるように、シーンを "探す" 機能です。In 交換モード では、プロダクションに配置する前に、すべてのマルチステージイベントをプレビューするために、シーン間を切り替えることもできます。

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

  1. Create a new Script 内で ServerScriptService を新規作成します。

  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. スタジオの ビュー メニューから、 ツールボックス を開きます。

    Toolbox toggle button in Studio
  2. クリエイターストア タブを選択し、ドロップダウンメニューから プラグイン を選択します。

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

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

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

シーンの読み込みと解除

シーンの作成 で説明したように、シーンの 環境 フォルダには、ユーザーが見たり聞いたりするすべてが含まれており、3D オブジェクト も含まれています。プラグインは、ワークスペース内の組織化されたフォルダにシーンのアセットを迅速にロードしたり、出したりするのを助けます。

プラグインアクショ操作説明
客户をロードする シーンのクライアントコンテンツがロードされない場合、 環境 / クライアント フォルダを ワークスペース / ScenesClient フォルダに移動します。
サーバーをロード シーンのサーバーコンテンツがロードされない場合、 環境 / サーバー フォルダを ワークスペース / シーンサーバー フォルダに移動します。
クライアントをアンロード シーンのクライアントコンテンツがロードされると、 クライアント フォルダが ワークスペース / ScenesClient から [シーン] / 環境 フォルダに移動します。
サーバーをアンロード シーンのサーバーコンテンツがロードされると、 サーバー フォルダが ワークスペース / シーンサーバー から [シーン] / 環境 フォルダに移動します。
すべてのシーンをロード解除 ロードされたすべてのシーンの クライアントサーバー フォルダを、その 環境 フォルダに戻します。

照明を保存してロードする

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

  1. トップレベルの サービスを介して、シーンの 照明プロパティ 、 ポストプロセッシング効果 、 大気効果 、 スカイボックス を構成し、トップレベルの サービスを介して、シーンの 照明プロパティ 、 ポストプロセッシング効果 、 大気効果 、 スカイボックス を構成します。

  2. シーンマネージャー プラグインウィンドウで、必要なシーンのために 照明を保存 をクリックします。

  3. そのシーンの 環境 / 照明 設定を選択して拡張し、フォルダの 属性 と、トップレベルの Lighting のクローンされた子供を見ると、同じ照明プロパティが見えます。

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

    照明プロパティと子がシーンに保存された後、プラグインウィンドウから 照明をロード をクリックして、トップレベルの サービスに素早くロードし直すことができます。

地形を保存してロードする

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

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

  2. シーンマネージャー プラグインウィンドウで、必要なシーンのために 地形を保存 をクリックします。

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

    地形がシーンに保存されたら、プラグインウィンドウから Terrain をクリックして、トップレベルの サービスに素早くロードできます

API リファレンス

スキームライフサイクルホック

オン設定時

オンセットアップ ライフサイクルホックは、 オンラン または オンエンドシーン で参照されるアセットや変数の初期化、場面の期間を持続する などを設定する目的です。このハックは、設定時に現在の時間を読み込むことができる 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 (Client)")
-- シーン環境にアクセス;インラインモードには適用しない
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- アセットを待つ
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", 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 (Server)")
-- シーン環境にアクセス;インラインモードには適用しない
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end

オンラン時

オンラン は、スキーム 内のメインの運用ライフサイクルホックです。場面のすべてのタイムドの 設定 を含める必要があります。例えば、オーディオ または アニメーション を再生してから、イベントのスケジュールを組む のような花火ショーのように。

クライアントスキーマ

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

オンエンド場面

オンエンドシーン ライフサイクルホックは、場面で残ったものをクリーンアップするのに便利で、例えば、オンセットアップ または オンラン で作成された接続を切断するなど、場面の期間中に残っているものを削除します。

サーバースキーマ

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。
クライアントスキーマ

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 – オーディオ 構成への参照。audio
  • StartAtAudioTime – オーディオの期間に関連してアニメーションを再生するとき。
  • EndAtAudioTime – オプションで、オーディオの期間に関連してアニメーションを終了する時間。
クライアントスキーマ

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 – 中断するオブジェクト
  • InfoTweenInfo 潜在層のインスタンス、期間を定義、Enum.EasingStyleEnum.EasingDirection、など
  • Properties – オブジェクトのプロパティと関連するターゲット値、および昼間の値。
OnStarttween が再生を開始するときに発動するカスタム関数。
OnHeartbeatすべての Heartbeat に発射するカスタム関数; 2番目のパラメータとして減少アルファを受け取る
OnEndターンフィンが再生を終えたときに発動するカスタム関数。
SyncToAudioティーンをオーディオ配置に同期するかどうかを定義するテーブル。次のキーを受け入れます:
  • Audio – オーディオ 構成への参照。audio
  • StartAtAudioTimes – オーディオの期間に関連して減少を再生する時間を定義する開始時間のテーブル。
クライアントスキーマ

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

間隔

指定された期間と指定された頻度で、カスタムコールバック関数を秒ごとに実行します。Executes a custom callback function over a specified duration on a specified frequency, in seconds.フラッシュライトのようなイベントを繰り返すのに便利、オーディオの強度をパルスするなど最低可能な周波数は 0秒ですが、技術的に最低周波数は常に Heartbeat に制限されます。

構成キー説明
StartTime秒単位で、シーン期間との間隔期間の開始。
EndTime秒単位で、インターバル期間がシーン期間に対して終了する。
FrequencyOnInterval 機能が、秒ごとに発射する頻度、最初の実行が StartTime であること。
OnStartインターバルの連続が開始するときに発動するカスタム関数。
OnInterval指定された期間内のすべての間隔で発射するカスタム関数(StartTime から EndTime)。
OnEndインターバルの連続が終わると発動するカスタム関数。
SyncToAudioインターバル期間をオーディオ配置に同期するかどうかを定義するテーブル。次のキーを受け入れます:
  • Audio – オーディオ 構成への参照。audio
  • StartAtAudioTime – オーディオの期間に関連してインターバル期間を開始する時間。
  • EndAtAudioTime – オプションの時間で、オーディオの期間に関連してインターバル期間を終了する。
クライアントスキーマ

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 に設定すると、参加/検索時間前に予定されたすべてのイベント開始時間が、参加/検索時間に発生します。 に設定すると、参加/検索後のスケジュールされた開始時間のみが発生します。デフォルトは false です。
SyncToAudioスケジュールを オーディオ 構成に同期するかどうかを定義するテーブル。次のキーを受け入れます:
  • Audio – オーディオ 構成への参照。audio
  • StartAtAudioTimes – オーディオの期間に関連して OnStart 機能を発射する時間を定義するスタート時間のテーブル。
クライアントスキーマ

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

通知する

フレームワークにモジュール、UI オブジェクト、接続などを通知するwhich are created in the OnRun lifecycle hook, ensuring they are properly cleaned up when 検索 する。使用ケースには以下が含まれます:

  • RunService.Heartbeat のような一時的なアドホック接続のフレームを通知して、シーンの期間の早期のポイントにアクセスするときに接続がクリーンアップされるようにする

    サーバースキーマ

    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
  • 接続またはその他の参照を初期化する OnRun ライフサイクルホック中にカスタム「クリーンアップ」関数を呼び出す で、 接続またはその他の参照を初期化する

    サーバースキーマ

    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()
    -- シーンクリーンアップでカスタムモジュールの「クリーン」関数を呼び出す
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - カスタムモジュール

    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(sceneName: string , startTime: number ?)

プログラマティックにシーンを sceneName でロードし、開始時点から startTime で始めます。シーンがサーバーからロードして再生開始する前の 5秒の「恵みの期間」があります。検索が発生してシーンが再生開始する前に。これは、正確に午後 4:15:00 に 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 (Client)")
end

検索する

求める(時間: 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("Scene is about to end!")
end)

設定SeekingPermissions

setSeekingPermissions(許可: table )

イベントの PlaceId および特定の UserIds および/または グループ およびその内の役割に基づいて許可を求めるグラント。詳しくは、シーンを検索して切り替える を参照してください。

getCurrent場景環境

getCurrentSceneEnvironment(): Folder (イエルド)

現在のシーンのクライアント側またはサーバー側の 環境 フォルダを返し、クライアント スキームスクリプトか サーバー スキームスクリプトから呼ばれるかによって変わります。

クライアントスキーマ

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("Current time is:", 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 (Server)")
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
end

客户から現在のサーバー環境を取得する getCurrentServerEnvironmentFromClient

getCurrentServerEnvironmentFromClient(): Folder (イエルド)

現在のシーンの サーバー側の 環境 フォルダを返します。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 (Client)")
-- シーン環境にアクセス;インラインモードには適用しない
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end

isLoading場面

isLoadingScene(): boolean

サーバーから呼び出して、現在シーンがロードされているかどうかを知る。

スクリプト

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

シーンが終了わろうとする前に、クライアントで発火します。デフォルト時間は 3秒ですが、setSceneWarningTime を通じて設定できます。このイベントは、LocalScript でのみ接続できます。

本地スクリプト

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが終了するときを検出する (クライアント側)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)

onSceneEndingWarningForServer

シーンが終了わろうとする前に、サーバーで発火します。デフォルト時間は 3秒ですが、setSceneWarningTime を通じて設定できます。このイベントは、Script でのみ接続できます。

スクリプト

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが終了するときを検出する (サーバー側)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)

onSceneLoadedForClient

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

本地スクリプト

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- シーンが開始されているかを検出する (クライアント側)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)

オンオーケストレーション完了

シーンが 時間長 に達し、効果的に終了したときに、サーバーで炎が起こります。このイベントは、終わったばかりのシーンのための 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)