ProceduralModels เป็นประเภทของ Model ที่ขับเคลื่อนด้วยพารามิเตอร์ ซึ่งช่วยให้คุณสร้างและสร้างวัตถุ 3 มิติได้โดยใช้โค้ด แทนที่จะทำการแก้ไขเนื้อหาของโมเดลด้วยตนเอง คุณกำหนดโครงสร้างของมันผ่าน โมดูลสร้างชุด และชุดของแอตทริบิวต์ เมื่อแอตทริบิวต์เหล่านั้นเปลี่ยนแปลง หรือเมื่อโมเดลมีการปรับขนาด โมดูลสร้างชุดจะทำงานโดยอัตโนมัติเพื่ออัปเดตโมเดล
โมเดลเชิงพารามิเตอร์ทำให้การทำงานง่ายขึ้นเพื่อ:
- ปรับโมเดลโดยไม่ทำลายโดยการเปลี่ยนแปลงพารามิเตอร์แทนการสร้างใหม่ ตัวอย่างเช่น การเปลี่ยนค่าตัวแปร StepSize บนบันไดหมุนจะทำให้บันไดถูกสร้างใหม่โดยอัตโนมัติด้วยจำนวนขั้นที่อัปเดต
- รวมเข้ากับระบบ Studio ที่มีอยู่เช่น การยกเลิก/ทำซ้ำ, Team Create และเครื่องมือลากได้โดยการทำงานตามฟังก์ชัน OnGenerate เพียงหนึ่งฟังก์ชัน
- รักษาประสิทธิภาพให้สูง โดยโมเดลจะมีพฤติกรรมเช่นเดียวกับวัตถุมาตรฐานจนกว่าพารามิเตอร์ของมันจะเปลี่ยน
- สร้างเนื้อหาได้ทั้งในเวลาแก้ไขและในระหว่างการทำงาน โดยใช้ระบบเดียวกันใน Studio และในเกม
- แชร์โมเดลที่มีพารามิเตอร์ใน Creator Store ทำให้สินทรัพย์ยืดหยุ่นและปรับแต่งได้มากขึ้น
แทรกโมเดลเชิงพารามิเตอร์
คุณสามารถเพิ่มโมเดลเชิงพารามิเตอร์ไปยังเกมของคุณโดยวิธีต่อไปนี้:
แทรกวัตถุ ProceduralModel ลงใน Workspace ด้วยตนเอง ตัวเลือกนี้รวมถึงเทมเพลตโมดูล ModuleScript เพื่อช่วยให้คุณเริ่มต้นได้

สร้างโมเดลเชิงพารามิเตอร์โดยใช้ Assistant หรือ Roblox Studio MCP server
แทรกโมเดลเชิงพารามิเตอร์จาก Creator Store เพื่อใช้หรือปรับแต่งโมเดลที่มีอยู่
ในการปรับแต่งวิธีการสร้างโมเดลเชิงพารามิเตอร์ คุณสามารถกำหนดโมดูลสร้างชุดของคุณเอง
ฟังก์ชัน OnGenerate
ฟังก์ชัน OnGenerate อยู่ที่ศูนย์กลางของ ProceduralModel ทุกอันในรูปแบบของ OnGenerate(params, targetContainer)
ฟังก์ชันที่กำหนดโดยนักพัฒนานี้มีหน้าที่ในการสร้างเนื้อหาของโมเดลตามพารามิเตอร์ที่ให้มาและเขียนผลลัพธ์ลงในคอนเทนเนอร์ที่ให้ไว้
OnGenerate มีความรับผิดชอบหลักสองประการ:
- ประมวลผลพารามิเตอร์ที่นำเข้าเพื่อตัดสินโครงสร้างของโมเดล
- เขียนผลลัพธ์ที่ผลิตขึ้นตามโครงสร้างนั้นลงใน targetContainer ที่ให้ไว้
ส่วนถัดไปจะอธิบาย:
- เมื่อใดและอย่างไรที่เอนจินเรียก OnGenerate
- เอนจินประมวลผลเนื้อหาที่เขียนลงใน targetContainer อย่างไร
โมดูลสร้างชุด
ฟังก์ชัน OnGenerate ถูกกำหนดไว้ภายใน ModuleScript ที่เรียกว่า โมดูลสร้างชุด ProceduralModel ระบุว่าโมดูลสร้างชุดใดที่จะใช้ผ่านคุณสมบัติ Generator ของมัน
โมดูลสร้างชุดเป็นโมดูล Luau มาตรฐาน แต่ต้องการโดยตรงโดยเอนจินเป็นส่วนหนึ่งของกระบวนการสร้างชุด มันปฏิบัติตามโครงสร้างที่กำหนดและส่งคืนตารางที่มีฟิลด์ตามมาตรฐาน
โครงสร้างโมดูลสร้างชุด
local MyGenerator = {}
MyGenerator.Attributes = {
DoSomething = true,
AmountOfSomething = 137,
}
type Params = {
Size: Vector3,
Attributes: typeof(MyGenerator.Attributes),
Pause: (self: any) -> (),
}
function MyGenerator.OnGenerate(params: Params, targetContainer: GeneratedFolder)
end
return MyGenerator
ฟิลด์ตามมาตรฐานประกอบด้วย:
- Attributes: แผนที่ที่กำหนดชื่อพารามิเตอร์และค่าพื้นฐานของพวกมัน
- OnGenerate: ฟังก์ชันที่รับตาราง params และ targetContainer
ตาราง params ภายใน OnGenerate ประกอบด้วย:
- Attributes: ตารางที่มีแอตทริบิวต์ที่กำหนดโดยโมดูลหรือแอตทริบิวต์ของโมเดลทั้งหมดหากไม่มีการระบุ
- Size: พารามิเตอร์ที่สะท้อนถึงขนาดของโมเดลที่มีสเกลเป็นหนึ่ง
- Pause: วิธีการที่ช่วยให้การสร้างสามารถหยุดชั่วคราวได้อย่างมีประสิทธิภาพในระหว่างการสร้างที่ซับซ้อน
ฟังก์ชัน OnGenerate ควรสร้างเนื้อรอบจุดกำเนิดใน targetContainer และควรไม่แก้ไขโดยตรงในลำดับชั้น DataModel หลัก
พารามิเตอร์
พารามิเตอร์ เป็นข้อมูลนำเข้าที่ควบคุมการสร้าง ช่วงนี้รวมถึงคุณสมบัติ Size พื้นฐานของ ProceduralModel รวมถึงแอตทริบิวต์ที่กำหนดเองซึ่งระบุในโมดูลสร้างชุด พารามิเตอร์เหล่านี้ พารามิเตอร์ที่ชัดเจน จะถูกส่งไปยัง OnGenerate โดยตรง พารามิเตอร์ พรรณนา เช่น โค้ดแหล่งที่มาของโมดูลหรือสถานะการสร้างพื้นที่ ยังทำให้เกิดการสร้างใหม่เมื่อมีการเปลี่ยนแปลง แต่จะไม่ถูกส่งไปยัง OnGenerate
ชุดพารามิเตอร์ทั้งหมดรวมถึง:
- พารามิเตอร์ที่ชัดเจน:
- Size: กำหนดพื้นที่รอบจุดกำเนิดที่มีการสร้างเนื้อหา
- Attributes: แผนที่ที่มีค่าปัจจุบันของแอตทริบิวต์นำเข้า
- พารามิเตอร์พรรณนา:
- Generator: โมดูลที่ให้ต_logicการสร้าง
- Source code: การเปลี่ยนแปลงโค้ด Luau ของโมดูลสร้างชุด
- Sandboxing: การเปลี่ยนแปลงสถานะการสร้างพื้นที่ของโมดูลสร้างชุด
พฤติกรรมการสร้างใหม่
เพื่อรักษาประสิทธิภาพและทำให้การโต้ตอบของ API ได้ง่ายขึ้น OnGenerate ไม่ จะถูกเรียกโดยทันทีเมื่อพารามิเตอร์เปลี่ยนแปลง แทนที่จะทำให้ ProceduralModel ถูกทำเครื่องหมายว่า สกปรก เพื่อบ่งบอกว่าการสร้างใหม่กำลังรออยู่ การสร้างใหม่ที่รอการดำเนินการแบบนี้มักเกิดขึ้นในกรอบเดียวกัน
หากการสร้างใหม่ล้มเหลว สถานะสกปรกจะถูกเคลียร์จนกว่าจะมีการเปลี่ยนแปลงพารามิเตอร์อีกครั้ง หากมีการบันทึกสถานที่ในขณะที่โมเดลเป็นสกปรก สถานะจะยังคงอยู่และโมเดลจะถูกเพิ่มลงในคิวการสร้างใหม่ในการโหลดเกมครั้งถัดไป
กระบวนการดำเนินการ
เมื่อมีเวลาประมวลผล เอนจินจะสร้างโมเดลสกปรกใหม่โดยการดำเนินการตามขั้นตอนดังต่อไปนี้:
- เรียกโมดูลสร้างชุด ใช้เวลาสำหรับการเกิด
- เริ่มเธรดใหม่สำหรับกระบวนการสร้าง
- สร้างตารางพารามิเตอร์ โดยการ Normalize Size ผ่านสเกลปัจจุบันของโมเดล
- ใช้ค่าคุณสมบัติมาตรฐานต่อแอตทริบิวต์ที่หายไป
- เริ่มต้น GeneratedFolder ชั่วคราวเป็น targetContainer
- เรียก OnGenerate
- หลังจาก OnGenerate ส่งคืน:
- หากสำเร็จ ย้ายผลลัพธ์ใน targetContainer ไปที่ ProceduralModel
- หากการสร้างล้มเหลว ใช้ตัวแทนความล้มเหลวแทน
หากพารามิเตอร์เปลี่ยนอีกครั้งในขณะที่เธรดการสร้างหยุดอยู่ การสร้างที่ยังคงจะถูกยกเลิกและเริ่มใหม่ด้วยพารามิเตอร์ที่อัปเดต
ผลลัพธ์จากการสร้าง
การวางผลลัพธ์จากการสร้างลงในโมเดลประกอบด้วยขั้นตอนดังต่อไปนี้:
- หยุดเธรดลูกที่รั่วไหลระหว่างการสร้าง
- ตั้งตำแหน่งผลลัพธ์โดยใช้ PivotTo
- หาก Scale ของโมเดลไม่ใช่ 1 ใช้ ScaleTo เพื่อยกเลิกการปรับขนาด
- เปลี่ยนผู้ปกครองผลลัพธ์ไปยัง GeneratedFolder ของโมเดล
- หากโมดูลสร้างชุดอยู่ในสภาพแวดล้อมที่ควบคุม ให้แน่ใจว่า ModuleScripts ในผลลัพธ์ไม่เกินความสามารถของโมดูลสร้างชุด
- เติมแอตทริบิวต์ที่ขาดหายไปในโมเดลด้วยค่าพื้นฐานของพวกเขา
- เคลียร์สถานะสกปรกของโมเดล
รายละเอียดการสร้าง
นอกจากการไหลของการสร้างหลักแล้ว รายละเอียดต่อไปนี้จะอธิบายพฤติกรรมและพิจารณาที่มีผลกระทบต่อการทำงานของการสร้าง ProceduralModel
การปรับขนาด
เนื่องจากการ normalization ของขนาดที่ใช้ вระหว่างการสร้าง ProceduralModel รองรับการทำงานหลายแบบ:
- การเปลี่ยนแปลงคุณสมบัติ Size จะสร้างโมเดลด้วยเนื้อหาใหม่
- การเปลี่ยนแปลง Scale จะปรับขนาดผลลัพธ์ที่มีอยู่โดยใช้ ScaleTo

การหมดเวลา
เป็นการป้องกันกรณีที่โมดูลสร้างชุดที่ทำงานมากเกินไปโดยไม่หยุดจะถูกยกเลิก หากการสร้างเกิดข้อผิดพลาด "Script Timeout" ให้เพิ่มการเรียกเพิ่มเติมไปยัง parameters:Pause() เพื่อให้เอนจินสามารถเลื่อนงานที่เหลือไปยังเฟรมถัดไป
การเรียก parameters:Pause() จะใช้ค่าใช้จ่ายน้อยมากและมักจะส่งคืนทันทีในระหว่างการทำงานของโมดูลสร้างชุด อาจถูกเรียกใช้ตามปกติที่จุดเริ่มต้นของลูปโดยไม่กระทบต่อประสิทธิภาพ
ประวัติการย้อนกลับ
ผลลัพธ์ที่สร้างขึ้นจะถูกจัดกลุ่มพร้อมกับการเปลี่ยนแปลงพารามิเตอร์ที่กระตุ้นให้เกิดผลด้วยการยกเลิกการโอเวอร์ไรด์จุดหมาย หากการเปลี่ยนแปลงพารามิเตอร์หลายอย่างเกิดขึ้นในกรอบเดียว ผลลัพธ์จะถูกเชื่อมโยงกับจุดหมายที่เกิดขึ้นล่าสุด
การสร้างพื้นที่
ProceduralModel รองรับการสร้างพื้นที่ โมเดลเชิงพารามิเตอร์ของบุคคลที่สามทั้งหมดที่คุณแทรกจาก Creator Store จะสร้างในสภาพแวดล้อมที่ควบคุมตามค่าเริ่มต้นเพื่อช่วยป้องกันการเปลี่ยนแปลงที่ไม่ตั้งใจในเกมของคุณ
โค้ดการสร้างจะทำงานในบริบทของโมดูลสร้างชุดและใช้สถานะการสร้างพื้นที่ของโมดูลนั้น การตั้งค่าเหล่านี้ไม่สามารถมองเห็นได้ตามปกติ หากต้องการดูหรือแก้ไขให้ตั้งค่า Workspace.SandboxedInstanceMode = Experimental สิ่งนี้จะทำให้คุณสมบัติ Sandboxed และ Capabilities ใน ModuleScript เปิดเผย
โมดูลสร้างชุดในสภาพแวดล้อมที่ควบคุมมักต้องการความสามารถอย่างน้อยดังต่อไปนี้:
- RunServerScript (เพื่อเรียกใช้โมดูล)
- CreateInstances
- Basic
การสร้างพื้นที่สำหรับโมเดลเชิงพารามิเตอร์และโมดูลสร้างชุดของมันเป็นอิสระจากกัน เมื่อใช้กับโมดูลสร้างชุด การสร้างพื้นที่ไม่ส่งผลกระทบต่อสคริปต์ระยะเวลาปกติภายใน ProceduralModel ซึ่งให้คุณเก็บการสร้างในเวลาที่แก้ไขให้จำกัดอย่างเข้มงวดโดยไม่กระทบต่อพฤติกรรมในเกม
การซ้อนกัน
ProceduralModels สามารถสร้างโมเดลเชิงพารามิเตอร์อื่น ๆ ได้ เมื่อเกิดเหตุการณ์นี้ เอนจินจะประมวลผลลำดับชั้นจากบนลงล่างภายในขั้นตอนการสร้างเดียวกันเมื่อเป็นไปได้ โดยที่โมเดลที่มีการซ้อนกันลึกกว่าจะถูกสร้างขึ้นสุดท้าย
ข้อจำกัด
- การสร้างไม่สนับสนุนภายในอินสแตนซ์ Actor
- โมเดลไม่สามารถแปลงเป็นแพ็คเกจได้
- ข้อต่อที่สร้างเมื่อใช้เครื่องมือลากพร้อมกับ Joint Surfaces ที่เปิดใช้งานจะไม่ถูกเก็บรักษาไว้ในการสร้างใหม่ของ ProceduralModel