Sê-ri sự kiện

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

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 Pilots24kGoldn 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:

  1. Từ View, mở Hộp công cụ và chọn tab Cửa hàng Nhà sáng tạo .

    Toolbox toggle button in Studio
  2. 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 .

  3. Tìm và nhấp vào ô Dev Modules .

  4. 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.

  5. 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:

  1. 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 .

  2. 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:

  1. Mở rộng thư mục EventSequencer và tìm thư mục BlankScene .

  2. 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ánghiệ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 , TerrainLighting , 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ứaMô 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ểnhiệ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àngMá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.

  1. Tạo một mới Script trong ServerScriptService .

  2. Sao chép mã sau vào kịch bản mới.

    Script - Thiết lập quyền tìm kiếm

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. Hoàn thành các bảng sau trong cuộc gọi setSeekingPermissions như sau:

    placeIDsDanh 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.
    userIDsDanh 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ợ.
    groupsDanh 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đị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:

  1. Từ menu Xem của Studio, mở Hộp công cụ .

    Toolbox toggle button in Studio
  2. 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.

  3. Trong trường tìm kiếm, hãy nhập Quản lý cảnh và nhấn Enter để tìm plugin.

  4. 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 .

  5. 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 độngMô 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àngMá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.

  1. 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 .

  2. 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.

  3. 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

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.

  1. 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 .

  2. 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.

  3. 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ìnhMô tả
StartTimeKhi nào phát lại âm thanh theo thời lượng cảnh, trong giây lát.
SoundIdID tài sản của âm thanh để chơi.
OnStartChức năng tùy chỉnh bắn khi âm thanh bắt đầu phát.
OnEndChức năng tùy chỉnh bắn khi kết thúc phát âm thanh.
VolumeKhố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ìnhMô tả
StartTimeKhi nào phát lại hoạt hình theo thời lượng của cảnh, trong giây lát.
EndTimeThờ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.
RigCái cục hoạt hình để chơi hoạt hình.
AnimationIdID tài sản của hoạt hình để chơi.
SpeedTốc độ phát lại của hoạt hiệu ứng động; mặc định là 1.
FadeInTimeSố 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).
FadeOutTimeSố thời gian để phai mờ hoạt hiệu ứng động, trong giây lát; mặc định là 0.2 (giây).
OnStartChức năng tùy chỉnh bắn khi hoạt hình bắt đầu chơi.
OnEndChức năng tùy chỉnh bắn khi hoạt hình kết thúc chơi.
LoopedWhether to loop the hiệu ứng động; mặc định là false .
SyncToAudioBả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:
  • Audio – Tham chiếu đến một audio cấu hình.
  • StartAtAudioTime – Khi nào phát lại hoạt hình theo thời lượng của âm thanh.
  • EndAtAudioTime – Thời gian tùy chọn để kết thúc hoạt hình so với thời lượng âm thanh.
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ìnhMô tả
StartTimesBảng thời gian bắt đầu so với thời lượng cảnh, bằng giây.
TweenBảng xác định đối tượng và tính chất để tween. Chấp nhận các chìa khóa sau:
  • Object – Đối tượng để tween.
  • InfoTweenInfo ví dụ cho tween, xác định thời lượng của nó, Enum.EasingStyle , Enum.EasingDirection , v.v.
  • Properties – Tính chất đối tượng và giá trị mục tiêu liên quan đến tween.
OnStartChức năng tùy chỉnh bắn khi tween bắt đầu chơi.
OnHeartbeatChứ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.
OnEndChức năng tùy chỉnh bắn khi tween kết thúc chơi.
SyncToAudioBả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:
  • Audio – Tham chiếu đến một audio cấu hình.
  • StartAtAudioTimes – Bảng thời gian bắt đầu xác định khi nào phát tween theo mối quan hệ với thời lượng của âm thanh.
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ìnhMô tả
StartTimeBắt đầu thời gian khoảng cách theo thời gian của cảnh, trong giây lát.
EndTimeKết thúc thời gian khoảng cách theo thời gian của cảnh, trong giây lát.
FrequencyThườ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 .
OnStartChức năng tùy chỉnh bắn khi chuỗi các khoảng cách bắt đầu.
OnIntervalChứ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 ).
OnEndChức năng tùy chỉnh bắn khi chuỗi các khoảng cách kết thúc.
SyncToAudioBả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:
  • Audio – Tham chiếu đến một audio cấu hình.
  • StartAtAudioTime – Khi nào bắt đầu thời lượng khoảng cách theo thời lượng của âm thanh.
  • EndAtAudioTime – Thời gian tùy chọn để kết thúc thời gian khoảng cách trong mối quan hệ với thời gian của âm thanh.
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ìnhMô tả
StartTimesBảng thời gian bắt đầu so với thời lượng cảnh, bằng giây.
OnStartChức năng tùy chỉnh để bắn vào mọi thời điểm được chỉ định trong bảng StartTimes.
SkippableBoolean 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 .
SyncToAudioBả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:
  • Audio – Tham chiếu đến một audio cấu hình.
  • StartAtAudioTimes – Bảng thời gian bắt đầu xác định khi nào bắn chức năng OnStart trong mối liên quan đến thời lượng âm thanh.
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ời
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Thông báo khung kết nối
    Schema:inform(tempConnection)
    end
    })
    end
  • Gọ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ỉnh
    customModule.init()
    -- Gọi chức năng "clean" trong mô-đun tùy chỉnh trong quét dọn cảnh
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - Mô-đun tùy chỉnh

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Khởi tạo kết nối nhịp tim
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Tách kết nối và xóa kết nối nhịp tim
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return 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() do
task.wait()
end
print("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)