เครื่องจัดลําดับกิจกรรม

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

EventSequencer เป็นกรอบรูปที่ทรงพลังที่ช่วยให้คุณสามารถสร้างกิจกรรมสดและฉากข้ามเซิร์ฟเวอร์ได้อย่างมีโครงสร้างบนลำดับการดำเนินการและการกระตุ้นที่กําหนดไว้เฉพาะเจาะจงยิ่งขึ้นโมดูลนี้ช่วยคุณ:

  • สร้างอีเวนต์หรือฉากในกรอบรูปแบบที่กำหนดไว้ล่วงหน้าผ่านการกำหนดค่าเสียง แอนิเมชัน และวัยรุ่นที่กำหนดไว้ล่วงหน้า
  • เปลี่ยนระหว่างฉากหลายบนหลายเซิร์ฟเวอร์โดยซิงโครไลซ์แอนิเมชันและภาพที่ซับซ้อนไปยังเวลาที่กำหนด
  • ค้นหาผ่านอีเวนต์และดูตัวอย่างประสบการณ์เพื่อการทดสอบและพัฒนา

กรอบนี้ได้รับการทดสอบในการต่อสู้ในอีเวนต์ Roblox เช่น Twenty One Pilots และ 24kGoldn คอนเสิร์ตรวมถึงประสบการณ์ที่ได้รับความนิยมอย่างมาก

เพื่อดู EventSequencer ในการกระทำภายในสถานที่ที่สามารถแก้ไขได้ ตรวจสอบแม่แบบ คอนเสิร์ต ใน Roblox Studioเทมเพลตนี้เป็นจุดเริ่มต้นที่ครอบคลุมสำหรับนักพัฒนาในการสร้างกิจกรรม/คอนเสิร์ตและทำความคุ้นเคยกับคุณลักษณะและส่วนประกอบต่างๆ ที่เกี่ยวข้อง

การใช้งานโมดูล

การติดตั้ง

เพื่อใช้กรอบงาน EventSequencer ในประสบการณ์:

  1. จาก ดู เปิด กล่องเครื่องมือ และเลือกแท็บ ร้านค้าผู้สร้าง

    Toolbox toggle button in Studio
  2. ตรวจสอบให้แน่ใจว่าการจัดเรียง รูปแบบ ถูกเลือกแล้วคลิกที่ปุ่ม ดูทั้งหมด สำหรับ หมวดหมู่

  3. ค้นหาและคลิกที่แท็บ โมดูลพัฒนา

  4. ค้นหาโมดูล ตัวเรียงลําดับเหตุการณ์ และคลิก หรือลากและวางลงในมุมมอง 3D

  5. ในหน้าต่าง สํารวจ เคลื่อนย้ายแบบจำลองทั้งหมดของ EventSequencer ไปยัง ServerScriptService เมื่อเรียกใช้ประสบการณ์แล้ว โมดูลจะแจกจ่ายตัวเองไปยังบริการต่างๆ และเริ่มทำงาน

โหมดแฟรมเวิร์ก

เปลี่ยนโหมด

โหมดเฟรมเริ่มต้นคือ โหมดแทนที่ ซึ่งคุณออกแบบฉากที่ไม่ซ้ำกัน โดยวาง วัตถุ 3D , พื้นที่ , คุณสมบัติแสง , ผลกระทบสิ่งแวดล้อม และวัตถุอินเทอร์เฟซผู้ใช้ในไดเรกทอรี สภาพแวดล้อม ของฉากนั้นเมื่อฉากโหลดแล้ว วัตถุและคุณสมบัติเหล่านั้นจะถูกแจกจ่ายไปยัง Workspace , Terrain และ Lighting , แทนที่วัตถุ/คุณสมบัติที่มีอยู่เพื่อสร้างพื้นที่ที่สําเร็จแบบโคลน

โหมดออนไลน์

โหมดกรอบทดแทนอื่นคือ โหมดแบบออนไลน์ ซึ่งคุณออกแบบฉากที่ไม่ซ้ำกัน ด้วยโลจิสติกสำหรับการไหล/เหตุการณ์ของพวกเขา แต่กรอบจะไม่ ทำลาย วัตถุ 3D ที่มีอยู่ และพื้นดิน และคุณสมบัติแสง และผลกระทบทางสิ่งแวดล้อม ของผู้ใช้เพื่อสร้างสินทรัพย์/คุณสมบัติจากโฟลเดอร์ สภาพแวดล้อม ของสถานที่เมื่อโหลด

เพื่อเปิดใช้งานโหมดแบบออนไลน์:

  1. ภายในโมเดล EventSequencer ที่คุณวางไว้ใน ServerScriptService ดริลลงและเลือกค่า ออนไลน์ ภายในโฟลเดอร์ ReplicatedStorage

  2. ในหน้าต่าง คุณสมบัติ เปิดใช้งานกล่องเลือก ค่า ของมัน

สร้างฉาก

ฉาก เป็นส่วนหนึ่งของอีเวนต์โดยรวมหรือฉากตัดที่ห่อหุ้มด้วยชุดโฟลเดอร์หลายชุด แต่ละฉากมีโลจิสต์การเขียนโปรแกรมที่กำหนดการไหล/เหตุการณ์ของมันและฉากสามารถเก็บวัตถุ 3D ของตัวเอง พื้นที่ , คุณสมบัติแสง , ผลกระทบสิ่งแวดล้อม และวัตถุอินเทอร์เฟซผู้ใช้

เพื่อเริ่มต้นได้อย่างรวดเร็ว คุณสามารถค้นหาฉากว่างเปล่าภายในโฟลเดอร์หลักของโมดูล:

  1. ขยายโฟลเดอร์ EventSequencer และค้นหาโฟลเดอร์ BlankScene

  2. ย้ายหรือคัดลอกโฟลเดอร์ทั้งหมด BlankScene ไปยัง ReplicatedStorage

ระยะเวลาเวลา

แต่ละฉากควรมีระยะเวลา เวลา ในวินาที กำหนดระยะเวลาของมัน — เช่นเดียวกับภาพยนตร์หรือคอนเสิร์ตมีระยะเวลาที่กำหนดไว้ระยะเวลากำหนดเป็นค่าตัวเลข คุณสมบัติ บนโฟลเดอร์ของฉากชื่อ ระยะเวลา ซึ่งคุณสามารถตั้งค่าได้โดยตรงใน Studio หรือโปรแกรมอย่างเชิงเดียวผ่าน Instance:SetAttribute()

สภาพแวดล้อม

โฟลเดอร์สภาพแวดล้อมของฉากมีทุกอย่างที่ผู้ใช้เห็นและได้ยิน รวมถึง วัตถุ 3D , พื้นที่ , คุณสมบัติแสง และ ผลกระทบสิ่งแวดล้อม และวัตถุอินเทอร์เฟซผู้ใช้เมื่อฉากโหลดแล้ว วัตถุและคุณสมบัติเหล่านั้นจะถูกจัดส่งไปยัง Workspace , Terrain และ Lighting แทนที่วัตถุ/คุณสมบัติที่มีอยู่เพื่อสร้างพื้นที่ซ้ำ

โฟลเดอร์ สภาพแวดล้อม มีคอนเทนเนอร์ต่อไปนี้:

คอนเทเนอร์คําอธิบาย
ไคลเอนต์ มีทรัพยากรทั้งหมดที่จะโหลดเมื่อผู้ใช้รายใดรายหนึ่ง (ไคลเอนต์) เข้าร่วมกิจกรรม เช่น วัตถุอินเทอร์เฟซผู้ใช้หรือแอนิเมชันริก
ผู้เล่นจุดเกิด มีส่วนที่ผู้ใช้จะเกิดขึ้นเมื่อเข้าร่วม ส่วนใดในไดเรกทอรีนี้จะทำงานคล้ายกับ SpawnLocation
เซิร์ฟเวอร์ มีทรัพยากรทั้งหมดที่จะโหลดเมื่อฉากถูกสร้างครั้งแรกบนเซิร์ฟเวอร์ แนะนำให้ส่วนใหญ่ของทรัพยากรภาพไปที่นี่
พื้นที่ มีสถานที่ในฉาก
แสง ประกอบด้วยคุณสมบัติแสง ระดับโลก ในฐานะลักษณะ รวมถึงตัวปรับเปลี่ยนเช่น ผลกระทบของบรรยากาศ และ ผลกระทบหลังการประมวลผล

อีเวนต์

ไดเรกทอรีกิจกรรมของฉาก เป็นเพียงตัวชี้วัดชั่วคราวสำหรับ ที่สื่อสารระหว่างโมดูล ไคลเอนต์ และ เซิร์ฟเวอร์ ไม่จำเป็นต้องวางอะไรในโฟลเดอร์นี้

ไคลเอนต์

สคริปต์นี้ดําเนินการตามล็อกิกของ สเคมา บนไคลเอนต์

เซิร์ฟเวอร์

สคริปต์นี้ดําเนินการตามล็อกิกของ สเคมา บนเซิร์ฟเวอร์

แผนภาพฉาก

สครีมของฉาก สครีมของฉาก กำหนดสิ่งที่เกิดขึ้นที่จุดใดในเวลาของฉากคุณควรกำหนดสเคมาของฉากในโมดูล ไคลเอนต์ และ เซิร์ฟเวอร์ ทั้งสองและรวมถึง ลูกเชื่อมช่วงชีพ เพื่อจัดการเมื่อ การกำหนดค่า เกิดขึ้น

ตัวจับช่วงชีพจร

สคีมา การติดตามชีวิต ช่วยให้คุณจัดการเมื่อการดำเนินการของฉากเกิดขึ้น ฉากในการผลิตมักจะทำงานในกระบวนการที่เรียบง่ายที่สุด:

ระหว่างการทำงาน อาจถูกขัดขวางเมื่อค้นหา:

ทั้งสามตะขอสามารถทำซ้ำได้หากฉากถูกเล่นซ้ำ:

การกำหนดค่า

สเคมา การกำหนดค่า กำหนดการดำเนินการหลักของฉาก, ตัวอย่างเช่น เล่นเสียง ที่ 00:32, เรียกคิว แอนิเมชั่น เพื่อซิงค์กับเสียงนั้น, กำหนดการอีเวนต์ของฉาก เช่นการแสดงดอกไม้ไฟ, และอื่นๆทุกการกำหนดค่าสนับสนุนฟังก์ชันการโทรกลับบางอย่างที่พารามิเตอร์แรก ( self ) อินสแตนซ์

ค้นหาฉาก

คุณสมบัติพิเศษของ EventSequencer คือความสามารถในการ "ค้นหา" รอบฉากตามที่คุณอาจค้นหาผ่านวิดีโอใน โหมดแทนที่ คุณยังสามารถสลับระหว่างฉากเพื่อดูตัวอย่างกิจกรรมหลายฉากทั้งหมดก่อนที่จะส่งไปใช้ในการผลิต

การค้นหาฉากไม่สามารถเข้าถึงได้กับทุกคน เนื่องจากผู้ใช้เพียงแค่เพลิดเพลินกับกิจกรรมไม่ควรมีความสามารถในการควบคุมการไหลของเวลาแทนที่คุณต้องให้สิทธิ์ตามอีเวนต์ รวมทั้งกลุ่มเฉพาะ และ/หรือบทบาทภายในกลุ่มเหล่านั้น

  1. สร้างใหม่ 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. จากเมนู ดู ของ Studio, เปิด กล่องเครื่องมือ

    Toolbox toggle button in Studio
  2. เมื่อเลือกแท็บ ร้านค้าผู้สร้าง แล้ว เลือก ปลั๊กอิน จากเมนูการเลื่อนลง

  3. ในฟิลด์ค้นหา พิมพ์ ผู้จัดการฉาก และกด Enter เพื่อค้นหาปลั๊กอิน

  4. คลิกไอคอนของปลั๊กอินเพื่อดูรายละเอียดแล้วคลิกปุ่ม ติดตั้ง

  5. เมื่อติดตั้งแล้ว จะปรากฏในแท็บ ปลั๊กอิน ของ Studio

โหลดและถอดฉาก

ตามที่ระบุไว้ใน การสร้างฉาก ไฟล์โฟลเดอร์ สภาพแวดล้อม ของฉากมีทุกอย่างที่ผู้ใช้เห็นและได้ยินรวมถึง วัตถุ 3Dปลั๊กอินช่วยให้คุณโหลดสินทรัพย์ของฉากได้อย่างรวดเร็วไปยังหรือออกจากโฟลเดอร์ที่จัดระเบียบภายในพื้นที่ทํางาน

แอ็คชันคําอธิบาย
โหลดไคลเอนต์ หากเนื้อหาไคลเอนต์ของฉากไม่ถูกโหลด จะย้ายโฟลเดอร์ สภาพแวดล้อม / คลายเอนต์ ไปยังโฟลเดอร์ พื้นที่ทำงาน / ScenesClient
โหลดเซิร์ฟเวอร์ หากเนื้อหาเซิร์ฟเวอร์ของฉากไม่ถูกโหลด จะย้ายโฟลเดอร์ สภาพแวดล้อม / เซิร์ฟเวอร์ ของมันไปยังโฟลเดอร์ พื้นที่ทำงาน / ScenesServer
ปลดลูกค้า หากเนื้อหาไคลเอนต์ของฉากถูกโหลด จะย้ายโฟลเดอร์ ไคลเอนต์ จาก พื้นที่ทำงาน / ScenesClient กลับไปที่โฟลเดอร์ [ฉาก] / สภาพแวดล้อม
ปลดเซิร์ฟเวอร์ หากเนื้อหาเซิร์ฟเวอร์ของฉากถูกโหลดแล้ว จะย้ายโฟลเดอร์ เซิร์ฟเวอร์ จาก พื้นที่ทำงาน / เซิร์ฟเวอร์เซนส์ กลับไปที่โฟลเดอร์ [ฉาก] / สภาพแวดล้อม
เลิกโหลดทุกฉาก ย้ายโฟลเดอร์ ไคลเอนต์ และ เซิร์ฟเวอร์ ของทุกฉากที่โหลดแล้วกลับไปที่โฟลเดอร์ สภาพแวดล้อม ของมัน

บันทึกและโหลดแสง

บริการระดับสูง Lighting เก็บคุณสมบัติแสงและเอฟเฟกต์ภาพทั้งหมดของสถานที่เนื่องจากเป็นบริการระดับสูง คุณไม่สามารถย้ายมันไปยังสภาพแวดล้อม ของเซิร์ฟเวอร์ / เซิร์ฟเวอร์ หรือ สภาพแวดล้อม / ไดเรกทอรี ของไคลเอนต์ได้โดยตรงแทนที่คุณสามารถใช้ปลั๊กอินเพื่อคัดลอกคุณสมบัติและลูกหลานไปยังโฟลเดอร์ สภาพแวดล้อม / แสง ของฉาก

  1. กำหนดค่าประกายแสงของฉาก คุณสมบัติการแสดงผล , ผลกระทบการประมวลผลภายหลัง ผลกระทบทางอากาศ และ กล่องท้องฟ้า ผ่านบริการระดับสูง

  2. ในหน้าต่างปลั๊กอิน ผู้จัดการฉาก คลิก บันทึกแสง สำหรับฉากที่ต้องการ

  3. เลือกและขยายการกำหนดค่าสภาพแวดล้อม ของฉาก / แสง และคุณจะเห็นคุณสมบัติแสงเดียวกันกับ คุณลักษณะ ของโฟลเดอร์เช่นเดียวกับเด็กที่ถูกคลอนของบริการระดับสูง Lighting

    ตัวอย่างที่โคลน
    คุณสมบัติที่บันทึก

    เมื่อคุณบันทึกคุณสมบัติแสงและเด็กสําหรับฉากแล้ว คุณสามารถโหลดพวกเขากลับเข้าสู่บริการระดับสูง Lighting ได้อย่างรวดเร็วโดยคลิกที่ โหลดแสง จากหน้าต่างปลั๊กอิน

บันทึกและโหลดพื้นที่

เนื่องจาก Terrain เป็นคลาสระดับสูงภายใน Workspace คุณไม่สามารถย้ายพื้นที่ที่สร้างขึ้นหรือแกะสลักไปยังโฟลเดอร์ สภาพแวดล้อม / เซิร์ฟเวอร์ หรือ สภาพแวดล้อม / ไคลเอนต์ ได้โดยตรงแทนที่คุณสามารถใช้ปลั๊กอินเพื่อคัดลอกไปยังโฟลเดอร์ สภาพแวดล้อม / พื้นที่ ของฉาก

  1. กำหนดสภาพพื้นที่ของฉากผ่านบริการระดับสูง พื้นที่

  2. ในหน้าต่างปลั๊กอิน ผู้จัดการฉาก คลิก บันทึกพื้นที่ สำหรับฉากที่ต้องการ

  3. เลือกและขยายโฟลเดอร์ สภาพแวดล้อม / พื้นที่ ของฉากนั้นและคุณจะเห็นวัตถุ TerrainRegion ซึ่งเป็นตัวแทนของพื้นที่ที่บันทึก

    เมื่อพื้นที่ถูกบันทึกไว้สําหรับฉากแล้ว คุณสามารถโหลดกลับเข้าสู่บริการระดับสูง Terrain ได้อย่างรวดเร็วโดยคลิกที่ โหลดพื้นที่ จากหน้าต่างปลั๊กอิน

การอ้างอิง API

ตัวเชื่อมต่อวงจรชีวิตของโครงสร้าง

ในการตั้งค่า

สวิตช์ชีวิตรอบการติดตั้ง OnSetup มีจุดมุ่งหมายเพื่อเริ่มต้นทรัพยากรและตัวแปรที่จะได้รับการอ้างอิงใน OnRun หรือ OnEndScene ตั้งค่า connections ที่มีจุดมุ่งหมายเพื่ออยู่ระหว่างระยะเวลาของฉาก ฯลฯส่วนนี้รับพารามิเตอร์ 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

บนจุดจบฉาก

การดูดสัญญาณชีวิตในระหว่างการจบฉาก OnEndScene มีประโยชน์ในการล้างสิ่งที่โดดเด่นในฉาก เช่น การตัดการเชื่อมต่อที่สร้างขึ้นใน OnSetup หรือ OnRun ที่ยังคงอยู่ระหว่างระยะเวลาของฉาก

สเคมาร์เซิร์ฟเวอร์

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

การกำหนดค่าสเคมาโลจิส

เสียง

สร้างวัตถุ Sound ในพื้นที่ทำงานที่เล่นในเวลาที่กำหนดเสียงจะถูกลบหลังจากที่ฉากจบลงหรือหลังจากวัตถุ Sound สิ้นสุดการเล่น

กุญแจการกำหนดค่าคําอธิบาย
StartTimeเมื่อเล่นเสียงในความสัมพันธ์กับระยะเวลาฉากในวินาที
SoundIdID สินทรัพย์ของเสียงที่จะเล่น
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แอนิเมชั่นไรด์ที่จะเล่นแอนิเมชั่น
AnimationIdID สินทรัพย์ของแอนิเมชั่นที่จะเล่น
Speedความเร็วในการเล่นของแอนิเมชัน; ค่าเริ่มต้นคือ 1
FadeInTimeจํานวนเวลาที่จะจางไปในแอนิเมชั่นในวินาที; ค่าเริ่มต้นคือ 0.2 (วินาที)
FadeOutTimeแอนิเมชัน; ค่าเริ่มต้นคือ 0.2 (วินาที)
OnStartฟังก์ชันที่กำหนดเองเพื่อยิงเมื่อภาพเคลื่อนไหวเริ่มเล่น
OnEndฟังก์ชันที่กำหนดเองเพื่อยิงเมื่อแอนิเมชั่นสิ้นสุดการเล่น
Loopedว่าจะลูปแอนิเมชันหรือไม่; ค่าเริ่มต้นคือ false
SyncToAudioตาระบุว่าจะซิงค์แอนิเมชั่นไปยังการกำหนดค่าเสียง ออดิโอ หรือไม่ รองรับสัญลักษณ์ต่อไปนี้:
  • 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 – วัตถุที่จะเปลี่ยนระหว่าง
  • Info – ตัวอย่างสำหรับวัยรุ่นที่กำหนดระยะเวลาของมัน, TweenInfo , Enum.EasingStyle , Enum.EasingDirection เป็นต้น
  • Properties – คุณสมบัติของวัตถุและค่าเป้าหมายที่เกี่ยวข้องสำหรับวัยรุ่น
OnStartฟังก์ชันที่กำหนดเองเพื่อยิงเมื่อวัยรุ่นเริ่มเล่น
OnHeartbeatฟังก์ชันที่กําหนดเองเพื่อยิงทุก Heartbeat ; ได้รับอัลฟาทีนเป็นพารามิเตอร์ที่สอง
OnEndฟังก์ชันที่กำหนดเองเพื่อยิงเมื่อทีนจบการเล่น
SyncToAudioตาระบุว่าจะซิงค์วัยรุ่นไปยังการกำหนดค่าเสียง ออดิโอ หรือไม่ รองรับกุญแจต่อไปนี้:
  • 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

ช่วงเวลา

ดำเนินการตามฟังก์ชันการโทรกลับที่กําหนดเองผ่านระยะเวลาที่กําหนดบนความถี่ที่กําหนดในเวลาไม่กี่วินาทีมีประโยชน์สำหรับการทำซ้ำเหตุการณ์เช่นไฟกะพริบความถี่ของเสียงเพลงฯลฯความถี่ต่ำสุดที่เป็นไปได้คือ 0 วินาที แต่เทคนิคมีความถี่ขั้นต่ำอยู่เสมอที่ Heartbeat

กุญแจการกำหนดค่าคําอธิบาย
StartTimeจุดเริ่มต้นของระยะเวลาในความสัมพันธ์กับระยะเวลาของฉากในวินาที
EndTimeสิ้นสุดระยะเวลาในช่วงเวลาในความสัมพันธ์กับระยะเวลาฉากในวินาที
Frequencyบ่อยแค่ไหนที่ฟังก์ชัน OnInterval ควรจะยิง, ในวินาที, ด้วยการดําเนินการครั้งแรกที่ StartTime
OnStartฟังก์ชันที่กำหนดเองเพื่อยิงเมื่อชุดของช่วงเวลาเริ่มต้น
OnIntervalฟังก์ชันที่กำหนดเองเพื่อยิงทุกๆ ช่วงเวลาภายในระยะเวลาที่กำหนด ( StartTime ถึง EndTime )
OnEndฟังก์ชันที่กำหนดเองเพื่อยิงเมื่อชุดของช่วงเวลาสิ้นสุด
SyncToAudioตาระบุว่าจะซิงค์ระยะเวลาช่วงเวลาไปยังการกำหนดค่าเสียง ออดิโอ หรือไม่ รองรับกุญแจต่อไปนี้:
  • 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

กำหนดการ

คล้ายกับ ช่วงเวลา ยกเว้นว่าคุณสามารถกำหนดเวลาเริ่มต้นหลายรายการสำหรับเหตุการณ์เดียวกันได้ เช่น การกำหนดเวลาการแสดงดอกไม้ไฟสองครั้งในฉาก

กุญแจการกำหนดค่าคําอธิบาย
StartTimesตารางเวลาเริ่มต้นในความสัมพันธ์กับระยะเวลาฉากในวินาที
OnStartฟังก์ชันที่กำหนดเองเพื่อยิงทุกเวลาที่กำหนดในตาราง StartTimes
Skippableการกำหนดค่าบูลีนว่าอีเวนต์ที่กำหนดไว้สามารถข้ามไปสำหรับผู้ใช้ที่เข้าร่วมในภายหลังหรือเมื่อมองหาก่อนเวลาเริ่มต้นที่กำหนดไว้หากตั้งค่าเป็น false เวลาเริ่มต้นของอีเวนต์ทั้งหมดที่กำหนดไว้ก่อนเวลาเข้าร่วม/ค้นหาจะเกิดขึ้นในเวลาเข้าร่วม/ค้นหานั้นหากตั้งค่าเป็น true เฉพาะเวลาเริ่มต้นที่กำหนดไว้ หลังจากเข้าร่วม/ค้นหา จะเกิดขึ้นค่าเริ่มต้นคือ false
SyncToAudioตารางที่กำหนดว่าจะซิงค์กำหนดการกับการกำหนดค่าเสียง ออดิโอ หรือไม่ รองรับกุญแจต่อไปนี้:
  • 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 การเชื่อมต่อฯลฯซึ่งถูกสร้างขึ้นใน hook วงจรชีวิต OnRun เพื่อให้แน่ใจว่าจะถูกล้างอย่างถูกต้องเมื่อ ค้นหากรณีการใช้รวมถึง:

  • แจ้งกรอบของการเชื่อมต่อชั่วคราวเช่น 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
  • เรียกฟังก์ชัน "การล้าง" ที่กําหนดเองใน ModuleScript ที่เริ่มต้นการเชื่อมต่อหรืออ้างอิงอื่นๆ ในระหว่างการดําเนินการแฮ็กช่วงชีวิต 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

ฟังก์ชัน

โหลดฉาก

โหลดฉาก(ชื่อฉาก: string , เวลาเริ่มต้น: number ?)

โหลดฉากโดยโปรแกรมตาม sceneName และเริ่มต้นที่ startTime จากจุดเริ่มต้นจะมีช่วงเวลา 5 วินาที "ระยะเวลาการโหลด" สำหรับฉากที่จะโหลดจากเซิร์ฟเวอร์ก่อนที่จะค้นหาและเริ่มเล่นฉากซึ่งหมายความว่าหากคุณโทร loadScene("[SceneName]", 20) ในเวลา 4:15:00 น., กรอบรูปจะรอ 5 วินาทีนอกเหนือจาก 20 ที่ร้องขอ และเริ่มฉากในเวลา 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
-- สิ้นสุด "Track1"; โหลดฉากที่สองในคอนเสิร์ต
EventSequencer.loadScene("Track2")
else
-- กลับไปที่ฉากก่อนการแสดง
EventSequencer.loadScene("PreShow")
end
end)

สร้างสคริปต์

สร้าง Schema(): 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)

ตั้งเวลาเตือนฉาก

ตั้งเวลาเตือนฉาก(เวลาจบฉาก): number )

ตั้งจำนวนเวลาจากจุดสิ้นสุด ของทุกฉากที่ได้รับคำเตือน คุณสามารถตรวจจับคําเตือนได้ทั้งฝั่งไคลเอนต์ผ่าน ในการเตือนจุดจบฉากสําหรับไคลเอนต์ หรือฝั่งเซิร์ฟเวอร์ผ่าน ในการเตือนจุดจบฉากสําหรับเซิร์ฟเวอร์

สคริปต์

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)

ตั้งค่าการค้นหาสิทธิ์

ตั้งค่าการค้นหาสิทธิ์ (สิทธิ์: table )

ได้รับการอนุญาตตามคำขอของอีเวนต์ รวมถึงกลุ่มเฉพาะ และ/หรือบทบาทภายในกลุ่มเหล่านั้นดู ค้นหาและสลับฉาก สำหรับข้อมูลเพิ่มเติม

รับสภาพแวดล้อมในปัจจุบันของฉาก

รับสภาพแวดล้อมในปัจจุบันของฉาก>: 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

รับสภาพแวดล้อมเซิร์ฟเวอร์ปัจจุบันจากไคลเอนต์

รับสภาพแวดล้อมเซิร์ฟเวอร์ปัจจุบันจากไคลเอนต์>: 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

กําลังโหลดฉาก

กําลังโหลดฉาก:

เรียกจากเซิร์ฟเวอร์เพื่อตรวจสอบว่าฉากกําลังโหลดอยู่หรือไม่

สคริปต์

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
print(EventSequencer.isLoadingScene())
while EventSequencer.isLoadingScene() do
task.wait()
end
print("Scene loaded")

อีเวนต์

บนอีเวนต์จบฉากเตือนสำหรับไคลเอนต์

ปิด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)

บนอีเวนต์จบฉากสำหรับเซิร์ฟเวอร์

ปิด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)

บนอีเวนต์โหลดสำหรับไคลเอนต์

ไฟเกิดขึ้นบนไคลเอนต์เมื่อฉากเริ่มต้น อีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน 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
-- สิ้นสุด "การแสดงก่อน" โหลดฉากแรกในคอนเสิร์ต
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- สิ้นสุด "Track1"; โหลดฉากที่สองในคอนเสิร์ต
EventSequencer.loadScene("Track2")
else
-- กลับไปที่ฉากก่อนการแสดง
EventSequencer.loadScene("PreShow")
end
end)

ในหน้านี้