EventSequencer เป็นกรอบรูปที่ทรงพลังที่ช่วยให้คุณสามารถสร้างกิจกรรมสดและฉากข้ามเซิร์ฟเวอร์ได้อย่างมีโครงสร้างบนลำดับการดำเนินการและการกระตุ้นที่กําหนดไว้เฉพาะเจาะจงยิ่งขึ้นโมดูลนี้ช่วยคุณ:
- สร้างอีเวนต์หรือฉากในกรอบรูปแบบที่กำหนดไว้ล่วงหน้าผ่านการกำหนดค่าเสียง แอนิเมชัน และวัยรุ่นที่กำหนดไว้ล่วงหน้า
- เปลี่ยนระหว่างฉากหลายบนหลายเซิร์ฟเวอร์โดยซิงโครไลซ์แอนิเมชันและภาพที่ซับซ้อนไปยังเวลาที่กำหนด
- ค้นหาผ่านอีเวนต์และดูตัวอย่างประสบการณ์เพื่อการทดสอบและพัฒนา
กรอบนี้ได้รับการทดสอบในการต่อสู้ในอีเวนต์ Roblox เช่น Twenty One Pilots และ 24kGoldn คอนเสิร์ตรวมถึงประสบการณ์ที่ได้รับความนิยมอย่างมาก
เพื่อดู EventSequencer ในการกระทำภายในสถานที่ที่สามารถแก้ไขได้ ตรวจสอบแม่แบบ คอนเสิร์ต ใน Roblox Studioเทมเพลตนี้เป็นจุดเริ่มต้นที่ครอบคลุมสำหรับนักพัฒนาในการสร้างกิจกรรม/คอนเสิร์ตและทำความคุ้นเคยกับคุณลักษณะและส่วนประกอบต่างๆ ที่เกี่ยวข้อง

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


สภาพแวดล้อม
โฟลเดอร์สภาพแวดล้อมของฉากมีทุกอย่างที่ผู้ใช้เห็นและได้ยิน รวมถึง วัตถุ 3D , พื้นที่ , คุณสมบัติแสง และ ผลกระทบสิ่งแวดล้อม และวัตถุอินเทอร์เฟซผู้ใช้เมื่อฉากโหลดแล้ว วัตถุและคุณสมบัติเหล่านั้นจะถูกจัดส่งไปยัง Workspace , Terrain และ Lighting แทนที่วัตถุ/คุณสมบัติที่มีอยู่เพื่อสร้างพื้นที่ซ้ำ
โฟลเดอร์ สภาพแวดล้อม มีคอนเทนเนอร์ต่อไปนี้:
คอนเทเนอร์ | คําอธิบาย |
---|---|
ไคลเอนต์ | มีทรัพยากรทั้งหมดที่จะโหลดเมื่อผู้ใช้รายใดรายหนึ่ง (ไคลเอนต์) เข้าร่วมกิจกรรม เช่น วัตถุอินเทอร์เฟซผู้ใช้หรือแอนิเมชันริก |
ผู้เล่นจุดเกิด | มีส่วนที่ผู้ใช้จะเกิดขึ้นเมื่อเข้าร่วม ส่วนใดในไดเรกทอรีนี้จะทำงานคล้ายกับ SpawnLocation |
เซิร์ฟเวอร์ | มีทรัพยากรทั้งหมดที่จะโหลดเมื่อฉากถูกสร้างครั้งแรกบนเซิร์ฟเวอร์ แนะนำให้ส่วนใหญ่ของทรัพยากรภาพไปที่นี่ |
พื้นที่ | มีสถานที่ในฉาก |
แสง | ประกอบด้วยคุณสมบัติแสง ระดับโลก ในฐานะลักษณะ รวมถึงตัวปรับเปลี่ยนเช่น ผลกระทบของบรรยากาศ และ ผลกระทบหลังการประมวลผล |
อีเวนต์
ไดเรกทอรีกิจกรรมของฉาก เป็นเพียงตัวชี้วัดชั่วคราวสำหรับ ที่สื่อสารระหว่างโมดูล ไคลเอนต์ และ เซิร์ฟเวอร์ ไม่จำเป็นต้องวางอะไรในโฟลเดอร์นี้
ไคลเอนต์
สคริปต์นี้ดําเนินการตามล็อกิกของ สเคมา บนไคลเอนต์
เซิร์ฟเวอร์
สคริปต์นี้ดําเนินการตามล็อกิกของ สเคมา บนเซิร์ฟเวอร์
แผนภาพฉาก
สครีมของฉาก สครีมของฉาก กำหนดสิ่งที่เกิดขึ้นที่จุดใดในเวลาของฉากคุณควรกำหนดสเคมาของฉากในโมดูล ไคลเอนต์ และ เซิร์ฟเวอร์ ทั้งสองและรวมถึง ลูกเชื่อมช่วงชีพ เพื่อจัดการเมื่อ การกำหนดค่า เกิดขึ้น
ตัวจับช่วงชีพจร
สคีมา การติดตามชีวิต ช่วยให้คุณจัดการเมื่อการดำเนินการของฉากเกิดขึ้น ฉากในการผลิตมักจะทำงานในกระบวนการที่เรียบง่ายที่สุด:
ระหว่างการทำงาน อาจถูกขัดขวางเมื่อค้นหา:
- ในการตั้งค่า → ในระหว่างการดำเนินการ … ค้นหา → ในระหว่างการดำเนินการ … ค้นหา → ในระหว่างการดำเนินการ → ในฉากสุดท้าย
ทั้งสามตะขอสามารถทำซ้ำได้หากฉากถูกเล่นซ้ำ:
- ในการตั้งค่า → ในระหว่างการดำเนินการ → ในฉากสุดท้าย … เล่นซ้ำ → ในการตั้งค่า → ในระหว่างการดำเนินการ → ในฉากสุดท้าย
การกำหนดค่า
สเคมา การกำหนดค่า กำหนดการดำเนินการหลักของฉาก, ตัวอย่างเช่น เล่นเสียง ที่ 00:32, เรียกคิว แอนิเมชั่น เพื่อซิงค์กับเสียงนั้น, กำหนดการอีเวนต์ของฉาก เช่นการแสดงดอกไม้ไฟ, และอื่นๆทุกการกำหนดค่าสนับสนุนฟังก์ชันการโทรกลับบางอย่างที่พารามิเตอร์แรก ( self ) อินสแตนซ์
ค้นหาฉาก
คุณสมบัติพิเศษของ EventSequencer คือความสามารถในการ "ค้นหา" รอบฉากตามที่คุณอาจค้นหาผ่านวิดีโอใน โหมดแทนที่ คุณยังสามารถสลับระหว่างฉากเพื่อดูตัวอย่างกิจกรรมหลายฉากทั้งหมดก่อนที่จะส่งไปใช้ในการผลิต
การค้นหาฉากไม่สามารถเข้าถึงได้กับทุกคน เนื่องจากผู้ใช้เพียงแค่เพลิดเพลินกับกิจกรรมไม่ควรมีความสามารถในการควบคุมการไหลของเวลาแทนที่คุณต้องให้สิทธิ์ตามอีเวนต์ รวมทั้งกลุ่มเฉพาะ และ/หรือบทบาทภายในกลุ่มเหล่านั้น
สร้างใหม่ Script ภายใน 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 |
โหลดเซิร์ฟเวอร์ | หากเนื้อหาเซิร์ฟเวอร์ของฉากไม่ถูกโหลด จะย้ายโฟลเดอร์ สภาพแวดล้อม / เซิร์ฟเวอร์ ของมันไปยังโฟลเดอร์ พื้นที่ทำงาน / ScenesServer |
ปลดลูกค้า | หากเนื้อหาไคลเอนต์ของฉากถูกโหลด จะย้ายโฟลเดอร์ ไคลเอนต์ จาก พื้นที่ทำงาน / ScenesClient กลับไปที่โฟลเดอร์ [ฉาก] / สภาพแวดล้อม |
ปลดเซิร์ฟเวอร์ | หากเนื้อหาเซิร์ฟเวอร์ของฉากถูกโหลดแล้ว จะย้ายโฟลเดอร์ เซิร์ฟเวอร์ จาก พื้นที่ทำงาน / เซิร์ฟเวอร์เซนส์ กลับไปที่โฟลเดอร์ [ฉาก] / สภาพแวดล้อม |
เลิกโหลดทุกฉาก | ย้ายโฟลเดอร์ ไคลเอนต์ และ เซิร์ฟเวอร์ ของทุกฉากที่โหลดแล้วกลับไปที่โฟลเดอร์ สภาพแวดล้อม ของมัน |
บันทึกและโหลดแสง
บริการระดับสูง Lighting เก็บคุณสมบัติแสงและเอฟเฟกต์ภาพทั้งหมดของสถานที่เนื่องจากเป็นบริการระดับสูง คุณไม่สามารถย้ายมันไปยังสภาพแวดล้อม ของเซิร์ฟเวอร์ / เซิร์ฟเวอร์ หรือ สภาพแวดล้อม / ไดเรกทอรี ของไคลเอนต์ได้โดยตรงแทนที่คุณสามารถใช้ปลั๊กอินเพื่อคัดลอกคุณสมบัติและลูกหลานไปยังโฟลเดอร์ สภาพแวดล้อม / แสง ของฉาก
กำหนดค่าประกายแสงของฉาก คุณสมบัติการแสดงผล , ผลกระทบการประมวลผลภายหลัง ผลกระทบทางอากาศ และ กล่องท้องฟ้า ผ่านบริการระดับสูง
ในหน้าต่างปลั๊กอิน ผู้จัดการฉาก คลิก บันทึกแสง สำหรับฉากที่ต้องการ
เลือกและขยายการกำหนดค่าสภาพแวดล้อม ของฉาก / แสง และคุณจะเห็นคุณสมบัติแสงเดียวกันกับ คุณลักษณะ ของโฟลเดอร์เช่นเดียวกับเด็กที่ถูกคลอนของบริการระดับสูง Lighting
ตัวอย่างที่โคลน คุณสมบัติที่บันทึก เมื่อคุณบันทึกคุณสมบัติแสงและเด็กสําหรับฉากแล้ว คุณสามารถโหลดพวกเขากลับเข้าสู่บริการระดับสูง Lighting ได้อย่างรวดเร็วโดยคลิกที่ โหลดแสง จากหน้าต่างปลั๊กอิน
บันทึกและโหลดพื้นที่
เนื่องจาก Terrain เป็นคลาสระดับสูงภายใน Workspace คุณไม่สามารถย้ายพื้นที่ที่สร้างขึ้นหรือแกะสลักไปยังโฟลเดอร์ สภาพแวดล้อม / เซิร์ฟเวอร์ หรือ สภาพแวดล้อม / ไคลเอนต์ ได้โดยตรงแทนที่คุณสามารถใช้ปลั๊กอินเพื่อคัดลอกไปยังโฟลเดอร์ สภาพแวดล้อม / พื้นที่ ของฉาก
กำหนดสภาพพื้นที่ของฉากผ่านบริการระดับสูง พื้นที่
ในหน้าต่างปลั๊กอิน ผู้จัดการฉาก คลิก บันทึกพื้นที่ สำหรับฉากที่ต้องการ
เลือกและขยายโฟลเดอร์ สภาพแวดล้อม / พื้นที่ ของฉากนั้นและคุณจะเห็นวัตถุ 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 | เมื่อเล่นเสียงในความสัมพันธ์กับระยะเวลาฉากในวินาที |
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
ช่วงเวลา
ดำเนินการตามฟังก์ชันการโทรกลับที่กําหนดเองผ่านระยะเวลาที่กําหนดบนความถี่ที่กําหนดในเวลาไม่กี่วินาทีมีประโยชน์สำหรับการทำซ้ำเหตุการณ์เช่นไฟกะพริบความถี่ของเสียงเพลงฯลฯความถี่ต่ำสุดที่เป็นไปได้คือ 0 วินาที แต่เทคนิคมีความถี่ขั้นต่ำอยู่เสมอที่ Heartbeat
กุญแจการกำหนดค่า | คําอธิบาย |
---|---|
StartTime | จุดเริ่มต้นของระยะเวลาในความสัมพันธ์กับระยะเวลาของฉากในวินาที |
EndTime | สิ้นสุดระยะเวลาในช่วงเวลาในความสัมพันธ์กับระยะเวลาฉากในวินาที |
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 | การกำหนดค่าบูลีนว่าอีเวนต์ที่กำหนดไว้สามารถข้ามไปสำหรับผู้ใช้ที่เข้าร่วมในภายหลังหรือเมื่อมองหาก่อนเวลาเริ่มต้นที่กำหนดไว้หากตั้งค่าเป็น false เวลาเริ่มต้นของอีเวนต์ทั้งหมดที่กำหนดไว้ก่อนเวลาเข้าร่วม/ค้นหาจะเกิดขึ้นในเวลาเข้าร่วม/ค้นหานั้นหากตั้งค่าเป็น true เฉพาะเวลาเริ่มต้นที่กำหนดไว้ หลังจากเข้าร่วม/ค้นหา จะเกิดขึ้นค่าเริ่มต้นคือ 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 การเชื่อมต่อฯลฯซึ่งถูกสร้างขึ้นใน 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,})endModuleScript - โมดูลที่กำหนดเอง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
ฟังก์ชัน
โหลดฉาก
โหลดฉาก(ชื่อฉาก: 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() dotask.wait()endprint("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)