โมเดลเชิงพารามิเตอร์

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

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

โมเดลเชิงพารามิเตอร์ทำให้การทำงานง่ายขึ้นเพื่อ:

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

แทรกโมเดลเชิงพารามิเตอร์

คุณสามารถเพิ่มโมเดลเชิงพารามิเตอร์ไปยังเกมของคุณโดยวิธีต่อไปนี้:

  • แทรกวัตถุ ProceduralModel ลงใน Workspace ด้วยตนเอง ตัวเลือกนี้รวมถึงเทมเพลตโมดูล ModuleScript เพื่อช่วยให้คุณเริ่มต้นได้

    มุมมองใกล้ของหน้าต่าง Explorer วัตถุ Model ได้รับการเน้นด้วยลูกหลานสามตัวที่ซ้อนกัน
  • สร้างโมเดลเชิงพารามิเตอร์โดยใช้ 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 ถูกทำเครื่องหมายว่า สกปรก เพื่อบ่งบอกว่าการสร้างใหม่กำลังรออยู่ การสร้างใหม่ที่รอการดำเนินการแบบนี้มักเกิดขึ้นในกรอบเดียวกัน

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

กระบวนการดำเนินการ

เมื่อมีเวลาประมวลผล เอนจินจะสร้างโมเดลสกปรกใหม่โดยการดำเนินการตามขั้นตอนดังต่อไปนี้:

  1. เรียกโมดูลสร้างชุด ใช้เวลาสำหรับการเกิด
  2. เริ่มเธรดใหม่สำหรับกระบวนการสร้าง
  3. สร้างตารางพารามิเตอร์ โดยการ Normalize Size ผ่านสเกลปัจจุบันของโมเดล
  4. ใช้ค่าคุณสมบัติมาตรฐานต่อแอตทริบิวต์ที่หายไป
  5. เริ่มต้น GeneratedFolder ชั่วคราวเป็น targetContainer
  6. เรียก OnGenerate
  7. หลังจาก OnGenerate ส่งคืน:
    • หากสำเร็จ ย้ายผลลัพธ์ใน targetContainer ไปที่ ProceduralModel
    • หากการสร้างล้มเหลว ใช้ตัวแทนความล้มเหลวแทน

หากพารามิเตอร์เปลี่ยนอีกครั้งในขณะที่เธรดการสร้างหยุดอยู่ การสร้างที่ยังคงจะถูกยกเลิกและเริ่มใหม่ด้วยพารามิเตอร์ที่อัปเดต

ผลลัพธ์จากการสร้าง

การวางผลลัพธ์จากการสร้างลงในโมเดลประกอบด้วยขั้นตอนดังต่อไปนี้:

  1. หยุดเธรดลูกที่รั่วไหลระหว่างการสร้าง
  2. ตั้งตำแหน่งผลลัพธ์โดยใช้ PivotTo
  3. หาก Scale ของโมเดลไม่ใช่ 1 ใช้ ScaleTo เพื่อยกเลิกการปรับขนาด
  4. เปลี่ยนผู้ปกครองผลลัพธ์ไปยัง GeneratedFolder ของโมเดล
  5. หากโมดูลสร้างชุดอยู่ในสภาพแวดล้อมที่ควบคุม ให้แน่ใจว่า ModuleScripts ในผลลัพธ์ไม่เกินความสามารถของโมดูลสร้างชุด
  6. เติมแอตทริบิวต์ที่ขาดหายไปในโมเดลด้วยค่าพื้นฐานของพวกเขา
  7. เคลียร์สถานะสกปรกของโมเดล

รายละเอียดการสร้าง

นอกจากการไหลของการสร้างหลักแล้ว รายละเอียดต่อไปนี้จะอธิบายพฤติกรรมและพิจารณาที่มีผลกระทบต่อการทำงานของการสร้าง 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
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ