EventSequencer là một khung mạnh mẽ cho phép bạn xây dựng các sự kiện trực tiếp, xuyên máy chủ và cảnh cắt trên một chuỗi hành động và kích hoạt có cấu trúc.Cụ thể hơn, mô-đun này giúp bạn:
- Xây dựng một sự kiện hoặc cảnh trong một khung cấu trúc có cấu trúc thông qua các cài đặt lịch trình của âm thanh, hoạt hình và tuổi teen.
- Chuyển đổi giữa nhiều cảnh trên nhiều máy chủ, đồng bộ hóa các hoạt hình và hình ảnh phức tạp lên thời gian biểu.
- Tìm kiếm thông qua một sự kiện và xem trước trải nghiệm cho mục đích thử nghiệm và phát triển.
Khung này đã được kiểm tra trong các sự kiện Roblox như Twenty One Pilots và 24kGoldn nhạc hòa nhạc, cũng như nhiều trải nghiệm được truy cập nhiều nhất.
Để xem EventSequencer trong hành động trong một địa điểmcó thể chỉnh sửa, hãy xem mẫu Hòa nhạc trong Roblox Studio.Mẫu này là điểm khởi đầu toàn diện cho các nhà phát triển để tạo sự kiện/hòa nhạc và làm quen với các tính năng và thành phần khác nhau liên quan.

Sử dụng module
Cài đặt
Để sử dụng khung công cụ EventSequencer trong một trải nghiệm:
Hãy chắc chắn rằng kiểu sắp xếp Mô hình được chọn, sau đó nhấp vào nút Xem tất cả đối với Danh mục .
Tìm và nhấp vào ô Dev Modules .
Tìm mô-đun Sequencer sự kiện và nhấp vào nó, hoặc kéo và thả nó vào cửa sổ 3D.
Trong cửa sổ Explorer, di chuyển toàn bộ mô hình EventSequencer vào ServerScriptService .Sau khi chạy trải nghiệm, mô-đun sẽ phân phối bản thân cho các dịch vụ khác nhau và bắt đầu chạy.
Các chế độ khung nền
Thay thế chế độ
Chế độ khung mặc định là thay thế chế độ trong đó bạn thiết kế cảnh độc đáo bằng cách đặt đối tượng 3D , địa hình , tính chất ánh sáng , hiệu ứng môi trường và đối tượng giao diện người dùng vào thư mục Môi trường của cảnh đó.Khi một cảnh được tải, những đối tượng và thuộc tính này được phân phối vào Workspace , Terrain , và Lighting , thay thế các đối tượng/thuộc tính hiện có để tạo ra một không gian nhân bản.
Chế độ nối dài
Một chế độ khung thay thế là chế độ nối dòng trong đó bạn tương tự thiết kế các cảnh độc đáo với logic lập trình cho dòng chảy/sự kiện của chúng, nhưng khung sẽ không phá hủy các đối tượng 3D hiện có , địa hình , tính chất ánh sáng , hiệu ứng môi trường và các đối tượng giao diện người dùng để sao chép các tài sản/thuộc tính từ một thư mục môi trường của một cảnh khi tải.
Để bật chế độ nối dài:
Bên trong mô hình EventSequencer mà bạn đã đặt vào ServerScriptService , kéo xuống và chọn giá trị Inline bên trong thư mục ReplicatedStorage .
Trong cửa sổ Tính năng, bật công tắc Giá trị của nó.
Tạo cảnh
Một cảnh là về cơ bản là một phần của một sự kiện tổng thể hoặc một cảnh cắt gói lại trong một loạt các thư mục.Mỗi cảnh chứa logic lập trình xác định dòng/sự kiện của nó, và một cảnh có thể lưu các đối tượng 3D, địa hình, tính chất ánh sáng, hiệu ứng môi trường và các đối tượng giao diện người dùng.
Để bắt đầu nhanh chóng, bạn có thể tìm một cảnh trống bên trong thư mục chính của mô-đun:
Mở rộng thư mục EventSequencer và tìm thư mục BlankScene .
Di chuyển hoặc sao chép toàn bộ thư mục BlankScene vào ReplicatedStorage .
Thời gian
Mỗi cảnh nên có một thời lượng thời gian , trong giây lát, xác định thời lượng của nó - giống như một bộ phim hoặc buổi hòa nhạc có thời lượng cố định.Thời gian được xác định là một thuộc tính số trên thư mục của cảnh có tên là Thời gian mà bạn có thể đặt trực tiếp trong Studio hoặc thông qua lập trình.


Môi trường
Thư mục Môi trường của một cảnh chứa tất cả những gì người dùng nhìn thấy và nghe thấy, bao gồm đối tượng 3D, địa hình, thuộc tính ánh sáng và hiệu ứng môi trường, và các đối tượng giao diện người dùng.Khi một cảnh được tải, những đối tượng và thuộc tính này được phân phối vào Workspace , Terrain và Lighting , thay thế các đối tượng/thuộc tính hiện có để tạo ra một không gian nhân bản.
Thư mục Môi trường chứa các thùng chứa sau:
Thùng chứa | Mô tả |
---|---|
Khách hàng | Bao gồm tất cả các tài nguyên cần tải khi bất kỳ người dùng (khách hàng) nào tham gia sự kiện, chẳng hạn như đối tượng giao diện người dùng hoặc một giàn hoạt hình. |
Người chơi sinh ra | Bao gồm các phần mà người dùng xuất hiện khi tham gia. Bất kỳ phần nào trong thư mục này cũng hành xử tương tự như một SpawnLocation . |
Máy chủ | Bao gồm tất cả các tài sản cần tải khi một cảnh được tạo lần đầu tiên trên máy chủ. Khuyến nghị hầu hết các tài sản hình ảnh đi đến đây. |
Địa hình | Bao gồm địa hình cảnh. |
Ánh sáng | Bao gồm các thuộc tính chiếu sáng toàn cầu như thuộc tính, cũng như các chỉnh sửa như hiệu ứng khí quyển và hiệu ứng xử lý sau khi in. |
Sự kiện
Thư mục sự kiện của một cảnh chỉ là một chỗ trống cho để giao tiếp giữa các mô-đun Client và Server .Nó không phải là yêu cầu đặt bất cứ thứ gì vào thư mục này.
Khách hàng
Các kịch bản này thực hiện logic schema trên máy khách.
Máy chủ
Các kịch bản này thực hiện logic schema trên máy chủ.
Sơ đồ cảnh
Một bản sơ đồ của một cảnh xác định những gì xảy ra tại thời điểm nào trong thời gian của cảnh .Bạn nên xác định sơ đồ của một cảnh trong cả mô-đun Khách hàng và Máy chủ của nó và bao gồm móc cuộc sống để quản lý khi cấu hình xảy ra.
Các móc chu kỳ cuộc sống
Schema móc cuộc sống vòng đời cho phép bạn quản lý khi các hoạt động của cảnh xảy ra. Một cảnh trong sản xuất thường sẽ chạy trong dòng chảy đơn giản nhất:
Trong khi chạy có thể bị gián đoạn khi tìm kiếm:
Cả ba móc có thể lặp lại nếu cảnh được chơi lại:
Cài đặt
Schema cấu hình định nghĩa các hoạt động chính của một cảnh, ví dụ phát âm thanh ở 00:32, xếp hàng một hoạt hình để đồng bộ với âm thanh đó, lịch sự kiện của một cảnh như một buổi trình diễn pháo hoa, và nhiều hơn nữa.Mỗi cấu hình hỗ trợ một số chức năng gọi lại nơi tham số đầu tiên ( self ) là ví ví dụ / trường hợpcấu hình.
Tìm cảnh
Một tính năng độc đáo của EventSequencer là khả năng "tìm kiếm" xung quanh các cảnh như bạn có thể tìm kiếm thông qua video.Trong Chế độ thay thế, bạn cũng có thể chuyển đổi giữa các cảnh để xem trước toàn bộ sự kiện nhiều cảnh trước khi triển khai nó vào sản xuất.
Tìm kiếm cảnh không thể truy cập được với tất cả mọi người bởi vì người dùng chỉ đơn giản là thưởng thức sự kiện không nên có khả năng kiểm soát dòng thời gian của nó.Thay vào đó, bạn phải cấp quyền tìm kiếm dựa trên sự kiện của nó cũng như các nhóm cụ thể và/hoặc vai trò trong chúng.
Tạo một mới Script trong ServerScriptService .
Sao chép mã sau vào kịch bản mới.
Script - Thiết lập quyền tìm kiếmlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Hoàn thành các bảng sau trong cuộc gọi setSeekingPermissions như sau:
placeIDs Danh sách phân cách bằng phân tách PlaceId các giá trị để hỗ trợ tìm kiếm bên trong. userIDs Danh sách dấu phân cách của UserIds cho những người có thể tìm kiếm trong các vị trí được hỗ trợ. groups Danh sách phân tách bằng phân cách dấu phẩy của các bảng, mỗi bảng chứa một ID nhóm và thứ hạng tối thiểu của các thành viên nhóm đó có thể tìm kiếm trong các địa điểm được hỗ trợ.
Plugin quản lý cảnh
Plugin Quản lý cảnh là một công cụ hữu ích để tải và tháo cảnh, ánh sáng và địa hình.Trừ khi bạn đang sử dụng Chế độ Nối dài, thì được khuyến khích sử dụng plugin này thay vì đặt/chỉnh sửa các đối tượng và thuộc tính cảnh bằng tay.
Để cài đặt plugin:
Từ menu Xem của Studio, mở Hộp công cụ .
Với tab Cửa hàng Nhà sáng tạo được chọn, hãy chọn Plugins từ menu thả xuống.
Trong trường tìm kiếm, hãy nhập Quản lý cảnh và nhấn Enter để tìm plugin.
Nhấp vào biểu tượng của plugin để xem chi tiết và sau đó nhấp vào nút Cài đặt .
Khi plugin được cài đặt, nó xuất hiện trong tab Plugins của Studio.
Tải và tháo tính cảnh
Như được mô tả trong tạo cảnh, thư mục Môi trường của một cảnh chứa mọi thứ mà người dùng nhìn thấy và nghe thấy, bao gồm đối tượng 3D.Plugin giúp bạn nhanh chóng tải tài sản của một cảnh vào hoặc ra khỏi các thư mục được tổ chức trong không gian làm việc.
Hành động hành động | Mô tả |
---|---|
Tải khách hàng | Nếu nội dung khách hàng của cảnh không được tải, di chuyển thư mục Môi trường / Khách hàng của nó vào thư mục Không gian làm việc / ScenesClient . |
Tải máy chủ | Nếu nội dung máy chủ của cảnh không được tải, di chuyển thư mục Môi trường / Máy chủ của nó vào thư mục Không gian làm việc / ScenesServer . |
Gỡ bỏ khách hàng | Nếu nội dung khách hàng của cảnh được tải, di chuyển thư mục Khách hàng của nó từ Workspace / ScenesClient trở lại thư mục [Cảnh] / Môi trường . |
Gỡ bỏ máy chủ | Nếu nội dung máy chủ của cảnh được tải, di chuyển thư mục Máy chủ của nó từ Workspace / ScenesServer trở lại thư mục [Cảnh] / Môi trường . |
Xóa tất cả cảnh | Di chuyển tất cả các thư mục Khách hàng và Máy chủ của mỗi cảnh được tải trở lại thư mục Môi trường của nó. |
Lưu và tải ánh sáng
Dịch vụ cấp cao Lighting lưu trữ tất cả các thuộc tính chiếu sáng và hiệu ứng hình ảnh của một địa điểm.Vì đó là một dịch vụ cấp cao, bạn không thể di chuyển nó thủ công sang Môi trường / Máy chủ / Môi trường / Khách hàng thư mục của một cảnh cụ thể.Thay vào đó, bạn có thể sử dụng plugin để sao chép các thuộc tính và con của nó vào thư mục Môi trường / Ánh sáng của cảnh.
Tùy chỉnh các thuộc tính chiếu sáng của cảnh , ảnh hậu xử lý , hiệu ứng khí quyển , và hộp trời thông qua dịch vụ cấp cao .
Trong cửa sổ plugin Quản lý cảnh , nhấp vào Lưu ánh sáng cho cảnh mong muốn.
Chọn và mở rộng cấu hình Môi trường / Ánh sáng của cảnh đó và bạn sẽ thấy cùng một cấu hình ánh sáng như thuộc tính của thư mục, cũng như con cái được sao chép của dịch vụ cấp cao nhất Lighting.
Ví dụ được sao chép Thuộc tính được lưu Một khi các thuộc tính chiếu sáng và con cái được lưu cho một cảnh, bạn có thể nhanh chóng tải chúng trở lại dịch vụ cấp cao nhất Lighting bằng cách nhấp vào Tải ánh sáng từ cửa sổ plugin.
Lưu và tải địa hình
Vì Terrain là một lớp cấp cao trong Workspace, bạn không thể di chuyển thủ công địa hình được tạo hoặc chạm khắc sang thư mục Môi trường / Máy chủ / Môi trường / Khách hàng của một cảnh cụ thể.Thay vào đó, bạn có thể sử dụng plugin để sao chép nó vào thư mục Môi trường / Khu vực của cảnh.
Tùy chỉnh địa hình của cảnh thông qua dịch vụ địa hình cấp cao Địa hình .
Trong cửa sổ plugin Quản lý cảnh , nhấp vào Lưu địa hình cho cảnh mong muốn.
Chọn và mở rộng thư mục Môi trường / Địa hình của cảnh đó và bạn sẽ thấy một đối tượng TerrainRegion đại diện cho địa hình đã lưu.
Một khi địa hình được lưu cho một cảnh, bạn có thể nhanh chóng tải nó trở lại vào dịch vụ cấp cao Terrain bằng cách nhấp vào Tải địa hình từ cửa sổ plugin.
Tham chiếu API
Các móc chu kỳ biểu tượng Schema
Trong khi khởi tạo
Cuộc gọi chu kỳ OnSetup dành cho việc khởi tạo tài sản và biến số sẽ được tham chiếu trong OnRun hoặc OnEndScene, thiết lập connections nhằm mục đích duy trì trong thời gian của cảnh, v.v.Điểm nối này nhận tham số timePositionObject cho phép bạn đọc thời gian hiện tại khi cài đặt.
Cấu trúc khách hàng
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)")
-- Môi trường cảnh truy cập; không áp dụng cho chế độ Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Chờ tài sản
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", timePositionObject.Value)
end
Cấu trúc máy chủ
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)")
-- Môi môi trườngcảnh truy cập; không áp dụng cho chế độ Inline
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end
Trong khi chạy
Trong khi chạy là hook chu kỳ hoạt động chính trong một biểu tượng .Nó nên chứa tất cả các cấu hình có thời gian cho cảnh, từ chơi âm thanh hoặc một hoạt hình đến lên lịch một sự kiện giống như một màn trình diễn pháo hoa.
Cấu trúc khách hàng
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
Trên kết thúc cảnh
Cuộc gọi chu kỳ cuối cùng của OnEndScene hữu ích để làm sạch bất cứ thứ gì nổi bật trong cảnh, chẳng hạn như tách kết nối được tạo trong OnSetup hoặc OnRun mà vẫn còn trong thời gian của cảnh.
Cấu trúc máy chủ
Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
Cài đặt cấu trúc
âm thanh
Tạo một đối tượng Sound trong không gian làm việc chơi vào một thời điểm nhất định.Âm thanh sẽ bị xóa sau khi cảnh kết thúc hoặc sau khi đối tượng Sound kết thúc phát.
Chìa khóa cấu hình | Mô tả |
---|---|
StartTime | Khi nào phát lại âm thanh theo thời lượng cảnh, trong giây lát. |
SoundId | ID tài sản của âm thanh để chơi. |
OnStart | Chức năng tùy chỉnh bắn khi âm thanh bắt đầu phát. |
OnEnd | Chức năng tùy chỉnh bắn khi kết thúc phát âm thanh. |
Volume | Khối lượng của đối tượng Sound ; mặc định là 0,5. |
Cấu trúc khách hàng
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
hoạt hình
Tạo một Animation chơi vào một thời điểm nhất định.
Chìa khóa cấu hình | Mô tả |
---|---|
StartTime | Khi nào phát lại hoạt hình theo thời lượng của cảnh, trong giây lát. |
EndTime | Thời gian tùy chọn khi kết thúc hoạt hình theo thời lượng của cảnh, trong giây lát. |
Rig | Cái cục hoạt hình để chơi hoạt hình. |
AnimationId | ID tài sản của hoạt hình để chơi. |
Speed | Tốc độ phát lại của hoạt hiệu ứng động; mặc định là 1. |
FadeInTime | Số thời gian để biến mất trong hoạt hiệu ứng động, trong giây lát; mặc định là 0.2 (giây). |
FadeOutTime | Số thời gian để phai mờ hoạt hiệu ứng động, trong giây lát; mặc định là 0.2 (giây). |
OnStart | Chức năng tùy chỉnh bắn khi hoạt hình bắt đầu chơi. |
OnEnd | Chức năng tùy chỉnh bắn khi hoạt hình kết thúc chơi. |
Looped | Whether to loop the hiệu ứng động; mặc định là false . |
SyncToAudio | Bảng xác định xem có nên đồng bộ hoá hoạt họa vào cấu hình âm thanh hay không. Chấp nhận các chìa khóa sau:
|
Cấu trúc khách hàng
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
thiếu niên
Tạo một cấu hình có thể tùy chỉnh Tween được lưu trong tìm kiếm và trong tham gia năng động, có nghĩa là bạn có thể chuỗi tweens ở các điểm riêng biệt trong thời gian và mọi thứ sẽ chơi và đồng bộ như mong đợi.
Chìa khóa cấu hình | Mô tả |
---|---|
StartTimes | Bảng thời gian bắt đầu so với thời lượng cảnh, bằng giây. |
Tween | Bảng xác định đối tượng và tính chất để tween. Chấp nhận các chìa khóa sau:
|
OnStart | Chức năng tùy chỉnh bắn khi tween bắt đầu chơi. |
OnHeartbeat | Chức năng tùy chỉnh để bắn vào mỗi Heartbeat ; nhận nhân alpha làm tham số thứ hai. |
OnEnd | Chức năng tùy chỉnh bắn khi tween kết thúc chơi. |
SyncToAudio | Bảng xác định xem có nên đồng bộ tween với một cấu hình âm thanh audio. Chấp nhận các chìa khóa sau:
|
Cấu trúc khách hàng
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
khoảng cách
Thực hiện chức năng trả lời tùy chỉnh sau một thời gian cụ thể trên một tần suất cụ thể, trong giây lát.Hữu ích để lặp lại các sự kiện như nhấp nháy đèn, rung độ mạnh của âm thanh, v.v.Tần số thấp nhất có thể là 0 giây, nhưng kỹ thuật thì tần số tối thiểu luôn bị giới hạn ở Heartbeat .
Chìa khóa cấu hình | Mô tả |
---|---|
StartTime | Bắt đầu thời gian khoảng cách theo thời gian của cảnh, trong giây lát. |
EndTime | Kết thúc thời gian khoảng cách theo thời gian của cảnh, trong giây lát. |
Frequency | Thường xuyên chức năng OnInterval nên bắn, trong giây lát, với lần thực hiện đầu tiên ở StartTime . |
OnStart | Chức năng tùy chỉnh bắn khi chuỗi các khoảng cách bắt đầu. |
OnInterval | Chức năng tùy chỉnh bắn mỗi khoảng thời gian trong khoảng thời gian được chỉ định ( StartTime đến EndTime ). |
OnEnd | Chức năng tùy chỉnh bắn khi chuỗi các khoảng cách kết thúc. |
SyncToAudio | Bảng xác định xem có nên đồng bộ thời lượng khoảng thời gian vào một cấu hình âm thanh. Chấp nhận các chìa khóa sau:
|
Cấu trúc khách hàng
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
lịch trình
Tương tự như khoảng cách ngoại trừ việc bạn có thể định nghĩa nhiều thời gian khởi động cụ thể cho cùng một sự kiện, chẳng hạn như lên lịch hiển thị pháo hoa hai lần trong một cảnh.
Chìa khóa cấu hình | Mô tả |
---|---|
StartTimes | Bảng thời gian bắt đầu so với thời lượng cảnh, bằng giây. |
OnStart | Chức năng tùy chỉnh để bắn vào mọi thời điểm được chỉ định trong bảng StartTimes. |
Skippable | Boolean xác định xem sự kiện lịch trình có thể bị bỏ qua cho người dùng tham gia muộn hoặc khi tìm kiếm trước thời gian bắt đầu lịch trình.Nếu được đặt thành false, tất cả thời gian bắt đầu sự kiện được lên lịch trước thời gian tham gia/tìm kiếm sẽ xảy ra tại thời gian tham gia/tìm kiếm đó.Nếu được đặt thành true , chỉ thời gian bắt đầu được lên lịch sau tham gia/tìm kiếm sẽ xảy ra.Mặc định là false . |
SyncToAudio | Bảng xác định xem có nên đồng bộ lịch trình với một cấu hình âm thanh hay không. Chấp nhận các chìa khóa sau:
|
Cấu trúc khách hàng
Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Khởi tạo kết nối nhịp tim tạm thời
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Thông báo khung kết nối
Schema:inform(tempConnection)
end
})
end
thông báo
Thông báo cho khung của bất kỳ mô-đun, đối tượng UI, kết nối, etcđược tạo trong hook chu kỳ sống OnRun, đảm bảo chúng được dọn dẹp đúng cách khi tìm kiếm.Các ví dụ sử dụng bao gồm:
Thông báo khung của một kết nối tạm thời ad-hoc như RunService.Heartbeat để kết nối được xóa sạch khi tìm kiếm điểm trước đó trong thời lượng của cảnh.
Cấu trúc máy chủSchema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Khởi tạo kết nối nhịp tim tạm thờilocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Thông báo khung kết nốiSchema:inform(tempConnection)end})endGọi một chức năng "clean up" tùy chỉnh trong một ModuleScript khởi tạo kết nối hoặc tham chiếu khác trong suốt vòng đời OnRun của hook.
Cấu trúc máy chủ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)-- Gọi chức năng "init" trong mô-đun tùy chỉnhcustomModule.init()-- Gọi chức năng "clean" trong mô-đun tùy chỉnh trong quét dọn cảnhSchema:inform(customModule, customModule.clean)end,})endModuleScript - Mô-đun tùy chỉnhlocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Khởi tạo kết nối nhịp timCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Tách kết nối và xóa kết nối nhịp timif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Chức năng
tải cảnh
loadScene(tên cảnh: string , thời gian bắt đầu: number ?)
Tải một cảnh theo chương trình bằng sceneName và bắt đầu nó tại startTime từ đầu.Sẽ có một khoảng thời gian 5 giây "thời gian ân sủng" để cảnh tải từ máy chủ trước khi tìm kiếm xảy ra và cảnh bắt đầu chơi.Điều này có nghĩa là nếu bạn gọi loadScene("[SceneName]", 20) tại chính xác 4:15:00 PM, khung sẽ chờ 5 giây bên cạnh 20 yêu cầu, khởi động cảnh tại 4:15:25 PM.
Tập lệnh
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Xác định cảnh tiếp theo để tải khi cảnh hiện tại kết thúc
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Chương trình "PreShow" kết thúc; tải cảnh đầu tiên trong buổi hòa nhạc
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- “Track1” kết thúc; tải cảnh thứ hai trong buổi hòa nhạc
EventSequencer.loadScene("Track2")
else
-- Lặp lại cảnh trước khi diễn
EventSequencer.loadScene("PreShow")
end
end)
tạo Schema
tạo Schema(): table
Trả về một instance của cảnh biểu tượng để tạo logic cho cảnh.
Cấu trúc khách hàng
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
end
tìm kiếm
tìm kiếm(thời gian: number )
Tìm kiếm giá trị time trong vài giây, từ đầu của cảnh đã tải xong.
Tập lệnh
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
thiết lậpThời gian cảnh báoScene
setSceneWarningTime(endSceneTimeWindow: number )
Đặt lượng thời gian từ cuối của tất cả các cảnh mà một cảnh báo được phát đi.Bạn có thể phát hiện cảnh báo qua phía khách hàng thông qua onSceneEndingWarningForClient hoặc qua phía máy chủ thông qua onSceneEndingWarningForServer.
Tập lệnh
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Tải cảnh
EventSequencer.loadScene("BeautifulScene")
-- Chỉnh thời gian cảnh báo thành 5 giây trước khi cảnh kết thúc
EventSequencer.setSceneWarningTime(5)
-- Phát hiện khi cảnh sắp kết thúc
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
thiết lậpSeekingPermissions
setSeekingPermissions(permissions: table)
Tặng quyền tìm kiếm dựa trên sự kiện của nó cũng như các nhóm cụ thể và/hoặc vai trò bên trong chúng.Xem tìm và chuyển cảnh để biết thêm thông tin.
nhận môi trường hiện tại của cảnh
getCurrentSceneEnvironment(): Folder (YIELDS)
Trả về thư mục Môi trường của bên khách hoặc bên máy chủ hiện tại của cảnh, tùy thuộc vào việc nó được gọi từ kịch bản Client hoặc kịch bản Server tương ứng.
Cấu trúc khách hàng
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)")
-- Môi trường cảnh truy cập; không áp dụng cho chế độ Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
Cấu trúc máy chủ
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
nhận môi trường máy chủ hiện tại từ khách hàng
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
Trả về thư mục Môi trường bên máy chủ của cảnh hiện tại.Không giống như getCurrentSceneEnvironment, bạn có thể gọi điều này từ kịch bản cơ sở dữ liệu Khách hàng.
Cấu trúc khách hàng
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)")
-- Môi trường cảnh truy cập; không áp dụng cho chế độ Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
đang tải cảnh
đang tải cảnh: boolean
Gọi từ máy chủ để xem liệu một cảnh hiện đang được tải hay không.
Tập lệnh
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("Scene loaded")
Sự kiện
trênSceneEndingWarningForClient
Lửa bùng phát trên máy khách trước khi cảnh sắp kết thúc.Thời gian mặc định là 3 giây, nhưng bạn có thể cấu hình nó thông qua setSceneWarningTime.Sự kiện này chỉ có thể được kết nối trong một LocalScript .
Tập lệnh địa phương
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Phát hiện khi cảnh sắp kết thúc (bên khách)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)
trênSceneEndingWarningForServer
Lửa trên máy chủ trước khi cảnh sắp kết thúc.Thời gian mặc định là 3 giây, nhưng bạn có thể cấu hình nó thông qua setSceneWarningTime.Sự kiện này chỉ có thể được kết nối trong một Script .
Tập lệnh
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Phát hiện khi cảnh sắp kết thúc (bên máy chủ)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
trênSceneLoadedForClient
Lửa bùng phát trên máy khách khi cảnh bắt đầu. Sự kiện này chỉ có thể được kết nối trong một LocalScript .
Tập lệnh địa phương
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Phát hiện khi cảnh bắt đầu (bên khách)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)
onOrchestrationFinished đã kết thúc
Lửa trên máy chủ khi một cảnh đã đạt đến thời lượng của nó và đã kết thúc hiệu quả.Sự kiện này nhận một endedSceneName argument tên chuỗi cho cảnh vừa kết thúc và bạn có thể chuỗi tắt sự kiện này để điều kiện tải một cảnh khác .Chỉ có thể kết nối trong một Script .
Tập lệnh
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Xác định cảnh tiếp theo để tải khi cảnh hiện tại kết thúc
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Chương trình "PreShow" kết thúc; tải cảnh đầu tiên trong buổi hòa nhạc
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- “Track1” kết thúc; tải cảnh thứ hai trong buổi hòa nhạc
EventSequencer.loadScene("Track2")
else
-- Lặp lại cảnh trước khi diễn
EventSequencer.loadScene("PreShow")
end
end)