이벤트 순서자 는 작업과 트리거의 구조화된 시퀀스에서 라이브 크로스 서버 이벤트와 컷신을 빌드할 수 있는 강력한 프레임워크입니다.더 구체적으로, 이 모듈은 다음을 도와줍니다:
- 오디오, 애니메이션 및 십대의 일정된 구성을 통해 구조화된 프레임워크에서 이벤트나 컷신을 빌드하십시오.
- 여러 서버에서 여러 장면 간의 전환, 복잡한 애니메이션과 시각을 타임라인에 동기화합니다.
- 이벤트를 통해 검색하고 테스트 및 개발 목적으로 경험을 미리 봅니다.
이 프레임워크는 트웬티 원 파일럿 및 24kGoldn 콘서트와 같은 Roblox 이벤트뿐만 아니라 많은 방문자가 많은 경험에서 전투 테스트를 거쳤습니다.
편집 가능한 플레이스내에서 이벤트 순서화기 작동을 보려면 Roblox Studio의 콘서트 템플릿을 확인하십시오.이 템플릿은 개발자가 이벤트/콘서트를 만들고 관련된 다양한 기능과 구성 요소에 익숙해지도록 하는 포괄적인 시작점입니다.

모듈 사용
설치
경험에서 이벤트 순서화기 프레임워크를 사용하려면:
모델 정렬이 선택되었는지 확인한 다음 모두 보기 버튼을 클릭하여 카테고리를 확인하십시오.
찾아서 클릭하십시오 개발자 모듈 타일.
이벤트 순서자 모듈을 찾아 클릭하거나 3D 뷰에 드래그 앤 드롭하세요.
탐색기 창에서 전체 이벤트 순서 조정기 모델을 서버 스크립트 서비스로 이동합니다.경험을 실행하면 모듈이 다양한 서비스에 배포되고 실행을 시작합니다.
프레임워크 모드
교체 모드
기본 프레임워크 모드는 교체 모드 로, 3D 개체 , 지형 , 조명 속성 , 환경 효과 , 사용자 인터페이스 개체를 해당 환경 폴더에 배치하여 독특한 장면 을 디자인합니다.장면이 로드되면 해당 개체와 속성이 , , 및 에 분배되어 기존 개체/속성을 교체하여 복제된 공간을 형성합니다.
인라인 모드
대체 프레임워크 모드는 인라인 모드 로, 유사하게 프레임워크에서 흐름/이벤트에 대한 스크립트 논리로 고유한 장면 을 디자인하지만, 프레임워크는 존재하지 않습니다 기존의 3D 개체 , 지형 , 조명 속성 , 환경 효과 , 및 사용자 인터페이스 개체를 클론하기 위해 로드할 때 환경 폴더의 환경 폴더에서 복사합니다.
인라인 모드를 활성화하려면:
서버스크립트서비스 에 배치한 이벤트 시퀀서 모델 내에서, 드릴다운하고 인라인 값을 복제된 저장소 폴더 내에서 선택합니다.
속성 창에서 해당 값 확인란을 토글합니다.
장면 만들기
A 장면 은 본질적으로 전체 이벤트나 시리즈의 폴더로 묶인 컷신의 일부입니다.각 장면에는 흐름/이벤트를 정의하는 스크립트 논리가 포함되어 있으며, 장면은 자체 3D 개체, 지형, 조명 속성, 환경 효과 및 사용자 인터페이스 개체를 저장할 수 있습니다.
신속하게 시작하려면 모듈의 주 폴더 내에서 빈 장면을 찾을 수 있습니다:
확장 이벤트 순서자 폴더를 확장하고 빈 장면 폴더를 찾습니다.
전체 빈 장면 폴더를 복제된 저장소 로 이동하거나 복사합니다.
시간 길이
각 장면에는 시간 길이 가 있어야 하며, 초로 정의되며, 영화나 콘서트와 마찬가지로 기간이 정해져 있습니다.시간 길이는 Studio에서 직접 설정하거나 프로그래밍 방식으로 TimeLength라는 이름의 장면 폴더에서 정의된 숫자 특성으로 정의됩니다.


환경
장면의 환경 폴더에는 사용자가 보고 듣는 모든 것, 즉 3D 개체, 지형, 조명 속성 및 환경 효과가 포함되어 있으며 사용자 인터페이스 개체도 포함됩니다.장면이 로드되면 해당 개체 및 속성이 Workspace , Terrain , 및 Lighting 에 분배되어 기존 개체/속성을 대체하여 복제된 공간을 형성합니다.
환경 폴더 에는 다음 컨테이너가 포함되어 있습니다:
컨테이너 | 설명 |
---|---|
클라이ент | 사용자(클라이언트)가 이벤트에 참여할 때 로드할 모든 자산을 포함하며, 사용자 인터페이스 개체 또는 애니메이션 리그와 같습니다. |
플레이어 스폰 | 사용자가 참여할 때 스폰하는 부품을 포함합니다. 이 폴더의 모든 부품은 SpawnLocation와 유사하게 동작합니다. |
서버 | 서버에서 처음 만들어지는 장면에 로드할 모든 자산을 포함합니다. 대부분의 시각적 자산이 여기에 있는 것이 좋습니다. |
지형 | 장면 지형을 포함합니다. |
조명 | 전역 조명 속성을 특성으로 포함하며, 대기 효과와 같은 수정자와 후처리 효과와 같은 수정자도 포함합니다. |
이벤트
장면의 이벤트 폴더는 클라이언트와 서버 모듈 간에 통신하는 용도로만 사용되는 자리 표시자입니다.이 폴더에 아무것도 배치할 필요는 없습니다.
클라이ент
이 스크립트는 클라이언트에서 스키마 논리를 실행합니다.
서버
이 스크립트는 서버에서 스키마 논리를 실행합니다.
장면 스키마
장면의 스키마 는 장면 타임라인의 어떤 지점에서 발생하는지 정의합니다.클라이언트 모듈과 서버 모듈 모두에서 장면의 스키마를 정의하고 구성이 발생할 때 관리하기 위한 수명 주기 후크를 포함해야 합니다.
수명 주기 후크
스키마 생명 주기 후크를 사용하면 장면 작업이 발생할 때 관리할 수 있습니다. 프로덕션 장면은 일반적으로 가장 간단한 흐름에서 실행됩니다.
OnRun은 다음을 검색할 때 중단될 수 있습니다:
세 가지 후크는 또한 장면이 재생될 경우 반복될 수 있습니다:
구성
스키마 구성 은 예를 들어 00:32에서 오디오 재생, 그 오디오와 동기화할 애니메이션 예약, 폭죽 보다같은 장면 이벤트 일정 등의 장면 핵심 작업을 정의합니다.모든 구성에서 첫 번째 매개 변수(self)가 구성 인스턴스인 특정 콜백 함수를 지원합니다.
장면 찾기
이벤트 순서자 의 독특한 기능은 비디오를 통해 찾을 수 있는 것처럼 장면을 "찾을" 수 있는 능력입니다.In 교체 모드에서 여러 장면을 전환하여 프로덕션에 배포하기 전에 전체 다중 장면 이벤트를 미리 볼 수 있습니다.
장면 검색은 모두에게 액세스할 수 없습니다. 이벤트를 단순히 즐기는 사용자는 시간 흐름을 제어할 수 있는 능력이 없어야 합니다.대신, 이벤트의 PlaceId 및 특정 UserIds 그리고/또는 그룹 및 역할 내에서 특정 권한을 부여해야 합니다.
Create a new Script within ServerScriptService .에서 새로운 를 생성합니다.
새 스크립트에 다음 코드를 붙여넣습니다.
스크립트 - 권한 획득 설정local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})다음 표를 채우고 setSeekingPermissions 호출에서 다음과 같이 수행하십시오:
장면 관리자 플러그인
장면 관리자 플러그인은 장면, 조명, 그리고 지형을 로드하고 언로드하는 데 유용한 도구입니다.줄 모드 를 사용하지 않는 한, 스씬 개체와 속성을 수동으로 배치/편집하는 대신 이 플러그인을 사용하는 것이 좋습니다.
플러그인을 설치하려면:
Studio의 보기 메뉴에서 도구 상자 를 엽니다.
크리에이터 스토어 탭이 선택되어 있으면 드롭다운 메뉴에서 플러그인을 선택합니다.
검색 필드에서 씬 매니저 를 입력하고 Enter를 눌러 플러그인을 찾으세요.
플러그인의 아이콘을 클릭하여 세부 정보를 보고 다음 설치 버튼을 클릭하십시오.
플러그인이 설치되면 Studio의 플러그인 탭에 나타납니다.
장면 불러오기 및 제거하기
장면 생성에 설명된 대로, 장면의 환경 폴더에는 사용자가 보고 듣는 모든 것, 즉 3D 개체가 포함되어 있습니다.플러그인은 작업 영역 내의 조직된 폴더에서 신속하게 장면의 자산을 불러오거나 내보낼 수 있도록 도와줍니다.
플러그인 액션 | 설명 |
---|---|
클라이언트 로드 | 장면의 클라이언트 콘텐츠가 로드되지 않으면 환경 / 클라이언트 폴더를 작업 공간 / ScenesClient 폴더로 이동합니다. |
서버 로드 | 장면의 서버 콘텐츠가 로드되지 않으면 환경 / 서버 폴더를 작업 공간 / 스케너 서버 폴더로 이동합니다. |
클라이언트 언로드 | 장면의 클라이언트 콘텐츠가 로드되면 클라이언트 폴더를 작업 공간 / ScenesClient 에서 [장면] / 환경 폴더로 이동합니다. |
서버 언로드 | 장면의 서버 콘텐츠가 로드되면 서버 폴더를 작업 공간 / 스케너 서버 에서 [장면] / 환경 폴더로 이동합니다. |
모든 장면 제거 | 로드된 모든 장면의 클라이언트 및 서버 폴더를 환경 폴더로 되돌립니다. |
조명 저장 및 로드
최상위 서비스 Lighting는 플레이스조명 속성과 시각 효과를 모두 저장합니다.최상위 서비스이므로 특정 장면의 환경 / 서버 또는 환경 / 클라이언트 폴더로 수동으로 이동할 수 없습니다.대신, 플러그인을 사용하여 속성과 자식을 장면의 환경 / 조명 폴더에 복사할 수 있습니다.
최상위 수준의 서비스를 통해 장면의 조명 속성, 포스트 프로세싱 효과, 대기 효과, 및 스카이박스를 구성하여 상호 작용합니다.
장면 관리자 플러그인 창에서 원하는 장면에 대해 조명 저장을 클릭하십시오.
저장 및 지형 로드
Since Terrain 는 Workspace 내의 최상위 클래스이므로 생성되거나 조각된 지형을 특정 장면의 환경 / 서버 또는 환경 / 클라이언트 폴더로 수동으로 이동할 수 없습니다.대신, 플러그인을 사용하여 장면의 환경 / 지형 폴더에 복사할 수 있습니다.
최상위 지형 서비스를 통해 장면의 지형을 구성합니다.
장면 관리자 플러그인 창에서 원하는 장면에 대해 지형 저장을 클릭하십시오.
선택하고 확장하여 그 장면의 환경 / 지형 폴더와 지형 영역 개체를 확인하면 저장된 지형을 나타내는 개체가 표시됩니다.
한 번 지형이 장면에 저장되면 플러그인 창에서 지형 불러오기 를 클릭하여 최상위 서비스인 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 (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
실행 중 OnRun
OnRun은 스키마 내의 주요 작업 수명 주기 호크입니다.오디오 재생이나 애니메이션 재생과 같이 장면에 대한 모든 시간 구성을 포함해야 합니다 불꽃놀이처럼 이벤트 일정을 예약하는 것과 같은 이벤트를 예약합니다.
클라이언트 스키마
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 수명 주기 호크는 장면에서 남아 있는 연결을 끊거나 장면 기간 동안 유지된 OnSetup 또는 OnRun에서 생성된 연결을 정리하는 데 유용합니다.
서버 스키마
Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
스키마 구성
오디오
특정 시간에 재생하는 작업 영역에서 Sound 개체를 생성합니다.그런 다음 장면이 끝나거나 Sound 개체가 재생을 마친 후 소리가 삭제됩니다.
구성 키 | 설명 |
---|---|
StartTime | 오디오를 장면 지속 시간과 관련해 플레이할 시기, 초 단위. |
SoundId | 플레이오디오의 자산 ID. |
OnStart | 오디오가 재생되기 시작할 때 발사하는 사용자 지정 함수. |
OnEnd | 오디오가 재생을 마칠 때 발사하는 사용자 지정 함수. |
Volume | Sound 개체의 용량; 기본값은 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 | 애니메이션을 오디오 구성에 동기화할지 여부를 정의하는 테이블. 다음 키를 허용합니다:
|
클라이언트 스키마
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 | 전환할 개체와 속성을 정의하는 테이블. 다음 키를 허용합니다:
|
OnStart | 트윈이 재생을 시작할 때 발동하는 사용자 지정 함수. |
OnHeartbeat | 모든 Heartbeat에 발사할 사용자 지정 함수; 두 번째 매개변수로 틴 알파를 받음 |
OnEnd | 청소년이 플레이를 마칠 때 발사하는 사용자 지정 함수. |
SyncToAudio | 십대를 오디오 구성으로 동기화할지 여부를 정의하는 테이블. 다음 키를 허용합니다.
|
클라이언트 스키마
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 | 초 단위의 장면 지속 시간과 간격 지속 시간 사이의 시작. Beginning of the interval duration in relation to the scene duration, in seconds. |
EndTime | 초 단위로 장면 지속 시간과 간격 기간의 끝입니다. End of the interval duration in relation to the scene duration, in seconds. |
Frequency | OnInterval 함수가 초마다 발동할 횟수, 첫 번째 실행이 StartTime에 있을 때. |
OnStart | 간격 시리즈가 시작될 때 발사할 사용자 지정 함수. |
OnInterval | 지정된 기간 내에서 모든 간격마다 발사하는 사용자 지정 함수(StartTime 에서 EndTime ). |
OnEnd | 간격 시리즈가 끝날 때 발사할 사용자 지정 함수. |
SyncToAudio | 간격 기간을 오디오 구성에 동기화할지 여부를 정의하는 테이블. 다음 키를 허용합니다.
|
클라이언트 스키마
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
일정
간격과 마찬가지로 동일한 이벤트에 대해 여러 특정 시작 시간을 정의할 수 있으며, 예를 들어 장면에서 두 번 폭죽 디스플레이를 예약하는 것과 같습니다.
구성 키 | 설명 |
---|---|
StartTimes | 장면 지속 시간과 관련된 시작 시간 표, 초 단위. |
OnStart | StartTimes 테이블에서 지정된 시간마다 발사하는 사용자 지정 함수. |
Skippable | 예약된 이벤트를 늦게 참여하는 사용자 또는 예약된 시작 시간 이전에 검색하는 경우 건너뛸 수 있는지 여부를 결정하는 부울입니다. Boolean defining whether the scheduled event can be skipped for users who join late, or for when seeking ahead of a scheduled start time.false로 설정하면 조인/검색 시간 전에 예약된 모든 이벤트 시작 시간이 해당 조인/검색 시간에 발생합니다. 로 설정하면 조인/검색 후 에 예약된 시작 시간만 발생합니다.기본값은 false 입니다. |
SyncToAudio | 일정을 오디오 구성으로 동기화할지 여부를 정의하는 테이블. 다음 키를 허용합니다:
|
클라이언트 스키마
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 수명 주기 후크 동안 사용자 지정 "정리" 함수를 호출하는 에서 연결 또는 다른 참조를 초기화하는 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()-- 장면 정리 시 커스텀 모듈에서 "clean" 함수 호출 장면 정리 시 커스텀 모듈에서 "clean" 함수 호출Schema:inform(customModule, customModule.clean)end,})end모듈 스크립트 - 사용자 지정 모듈local 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(sceneName: string , startTime: number ?)
프로그래밍 방식으로 시작 부분에서 sceneName 와 함께 장면을 불러오고 시작합니다.Programmatically loads a scene by and starts it at startTime from its beginning.검색이 발생하고 장면이 재생되기 전에 서버에서 장면을 로드하는 데 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
-- “프리쇼” 종료; 콘서트에서 첫 번째 장면 로드
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- “트랙1” 종료; 콘서트에서 두 번째 장면 로드
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
검색 seek
검색(시간: number )
현재 로드된 장면의 시작부터 초당 time 값을 찾습니다.
스크립트
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
설정된 신경 경고 시간
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)
검색 권한 설정 setSeekingPermissions
setSeekingPermissions(권한: table )
이벤트의 PlaceId 및 특정 UserIds 및/또는 그룹 및 역할을 기반으로 권한을 부여하는 요청을 부여합니다.자세한 내용은 검색 및 전환 장면을 참조하십시오.
getCurrentScene환경 가져오기
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 (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
클라이언트에서 getCurrentServerEnvironment 가져오기
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 (Client)")
-- 장면 환경에 액세스; 인라인 모드에는 적용되지 않음
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
장면 로드 중 isLoadingScene
isLoadingScene(): boolean
서버에서 호출하여 현재 장면이 로드되는지 알아봅니다.
스크립트
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("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)
오케스트레이션 완료 onOrchestrationFinished
장면이 자신의 시간 길이에 도달하고 효과적으로 종료되면 서버에서 화재가 발생합니다.이 이벤트는 방금 완료된 장면에 대해 endedSceneName 문자열 이름 인수를 받으며, 조건부로 다른 장면을 로드할 수 있습니다.연결할 수는 있지만 Script에만 연결할 수 있습니다.
스크립트
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- 현재 장면이 완료될 때 로드할 다음 장면 파악
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- “프리쇼” 종료; 콘서트에서 첫 번째 장면 로드
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- “트랙1” 종료; 콘서트에서 두 번째 장면 로드
EventSequencer.loadScene("Track2")
else
-- 공연 전 장면으로 루프백 하기
EventSequencer.loadScene("PreShow")
end
end)