การสตรีมอินสแตนซ์

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

ในเกม การสตรีมอินสแตนซ์ ช่วยให้เอนจิน Roblox โหลดและปลดโหลดเนื้อหาสามมิติและอินสแตนซ์ที่เกี่ยวข้องใน Workspace ได้อย่างไดนามิก ซึ่งสามารถปรับปรุงประสบการณ์ของผู้เล่นโดยรวมในหลาย ๆ ด้าน รวมถึง:

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

การสตรีมอินสแตนซ์ถูกควบคุมผ่านคุณสมบัติ Workspace.StreamingEnabled ซึ่งเปิดใช้งานโดยค่าเริ่มต้นสำหรับสถานที่ใหม่ที่สร้างใน Studio คุณสมบัตินี้ไม่สามารถตั้งค่าในสคริปต์ได้

หน้าต่างคุณสมบัติที่มีคุณสมบัติ StreamingEnabled เปิดใช้งานอยู่.

พฤติกรรมทางเทคนิค

ขอบเขต

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

สตรีมเข้า

เมื่อผู้เล่นเข้าร่วมเกมที่เปิดใช้งานการสตรีมอินสแตนซ์:

  1. อินสแตนซ์ใน Workspace จะถูกทำซ้ำไปยังลูกค้า ยกเว้น สิ่งต่อไปนี้:

    Models ที่ตั้งค่าเป็น Nonatomic (ค่าเริ่มต้น) เมื่อ Workspace.ModelStreamingBehavior ถูกตั้งค่าเป็น Improved

    ลูกหลานของอินสแตนซ์ข้างต้น

  2. ในระหว่างการเล่นเกม เซิร์ฟเวอร์อาจสตรีมอินสแตนซ์ในหมวดหมู่ที่เลื่อนออกไปข้างต้นไปยังลูกค้าตาม คุณสมบัติการสตรีม, ตำแหน่งของผู้เล่น, ประสิทธิภาพของอุปกรณ์ลูกค้า, และเงื่อนไขอื่น ๆ

สตรีมออก

ในระหว่างการเล่นเกม ลูกค้าอาจลบภูมิภาคของ BaseParts ออกจาก Workspace ของผู้เล่นตามพฤติกรรมที่ตั้งค่าโดย Workspace.StreamOutBehavior กระบวนการเริ่มต้นด้วยภูมิภาคที่อยู่ห่างไกลจาก จุดโฟกัสการทำซ้ำ และเคลื่อนเข้ามาใกล้ตามที่จำเป็น ภูมิภาคภายในช่วง Workspace.StreamingMinRadius จะไม่ถูกสตรีมออก

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

การประกอบ

การประกอบทางกายภาพ assemblies จะถูกสตรีม เข้า เป็นหน่วยที่สมบูรณ์ รวมถึง Constraints และ Attachments ที่เกี่ยวข้อง ช่วยให้มั่นใจว่าการอัปเดตฟิสิกส์ที่สอดคล้องกันบนลูกค้า ข้อยกเว้นเพียงอย่างเดียวคือเมื่อการประกอบถูก ยึด ในกรณีนี้จะมีเพียง BaseParts ภายในรัศมีการสตรีมที่ถูกสตรีมเข้าไปพร้อมกับ Constraints และ Attachments ที่เกี่ยวข้อง

การประกอบจะไม่ถูกสตรีม ออก จนกว่าทุก BaseParts ของมันจะมีสิทธิ์ในการสตรีมออก

คุณสมบัติการสตรีม

คุณสมบัติต่อไปนี้ควบคุมวิธีการที่การสตรีมอินสแตนซ์ใช้กับเกมของคุณ คุณสมบัติเหล่านี้ทั้งหมดเป็น ไม่สามารถเขียนสคริปต์ได้ และต้องตั้งค่าในวัตถุ Workspace ใน Studio

คุณสมบัติคำอธิบาย
EnableSLIMAvatarsควบคุมว่ามีการสร้างโมเดล SLIM สำหรับตัวละครอวตารในเกมหรือไม่ เมื่อเปิดใช้งาน อวตารจะเรนเดอร์โดยใช้ SLIM ในลักษณะเดียวกับที่การตั้งค่า Model.LevelOfDetail เป็น SLIM ทำงานกับโมเดลอื่น ๆ ดู SLIM สำหรับรายละเอียด
ModelStreamingBehaviorควบคุมว่าโมเดล Nonatomic (ค่าเริ่มต้น) จะสตรีมเข้าและออกอย่างไร

แนะนำ
ใช้ Improved เพื่อเปิดใช้งานการสตรีมที่มีประสิทธิภาพที่สุดสำหรับ Models ที่มีลูกหลาน BasePart
PredictiveStreamingModeเลือกใช้ การสตรีมเชิงพยากรณ์ ซึ่งใช้สัญญาณของเอนจินเพื่อสตรีมพื้นที่ที่ผู้เล่นน่าจะต้องการในไม่ช้า เช่น ตำแหน่งการเกิดใหม่หรือภูมิภาคที่ผู้เล่นเพิ่งออกจากผ่านการเปลี่ยนแปลง CFrame การพยากรณ์จะเป็นแบบเพิ่มขึ้น หมดอายุหลังจากเวลาสั้น ๆ หากไม่ได้ใช้งาน และจะถูกข้ามในลูกค้าที่มีข้อจำกัดด้านทรัพยากร
StreamingIntegrityModeเกมอาจทำงานในลักษณะที่ไม่ตั้งใจหากผู้เล่นเคลื่อนที่เข้าสู่ภูมิภาคของโลกที่ยังไม่ได้ถูกสตรีมไปยังพวกเขา คุณสมบัตินี้เสนอวิธีหลีกเลี่ยงสถานการณ์ที่อาจมีปัญหา

แนะนำ
ใช้ PauseOutsideLoadedArea เพื่อรักษาความสมบูรณ์ของการเล่นเกมโดยไม่หยุดชะงักโดยไม่จำเป็นหรือบ่อยเกินไป คุณยังสามารถ ปรับแต่งหน้าจอหยุดชะงัก
StreamingMinRadiusคุณสมบัตินี้ระบุรัศมีรอบ ๆ จุดโฟกัสการทำซ้ำ ที่อินสแตนซ์จะสตรีมเข้าในระดับความสำคัญสูงสุด ควรระมัดระวังเมื่อเพิ่มค่าเริ่มต้น เนื่องจากการทำเช่นนี้จะต้องใช้หน่วยความจำและแบนด์วิธของเซิร์ฟเวอร์มากขึ้นในขณะที่ลดส่วนประกอบอื่น ๆ

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

การตั้งค่า StreamingTargetRadius ที่เล็กลงจะลดภาระงานของเซิร์ฟเวอร์ เนื่องจากเซิร์ฟเวอร์จะไม่สตรีมอินสแตนซ์เพิ่มเติมเกินค่าที่ตั้งไว้ อย่างไรก็ตาม รัศมีเป้าหมายยังเป็นระยะทางสูงสุดที่ผู้เล่นจะสามารถเห็นรายละเอียดทั้งหมดของเกมของคุณได้ ดังนั้นคุณควรเลือกค่าที่สร้างสมดุลที่ดีระหว่างสิ่งเหล่านี้

แนะนำ
ใช้ค่าเริ่มต้นที่ 1024 เพื่อสร้างสมดุลที่ดีระหว่างการมองเห็นสำหรับผู้เล่นบนอุปกรณ์ที่มีประสิทธิภาพสูงและการใช้หน่วยความจำที่เหมาะสม
StreamOutBehaviorคุณสมบัตินี้ตั้งค่าพฤติกรรม การสตรีมออก ตามค่าของ Enum.StreamOutBehavior หากตั้งค่าเป็น LowMemory (ค่าเริ่มต้น) ลูกค้าจะสตรีมออกเฉพาะภูมิภาคที่อยู่นอกระยะรัศมีขั้นต่ำในสถานการณ์ที่มีหน่วยความจำต่ำ หากตั้งค่าเป็น Opportunistic ภูมิภาคที่อยู่นอก StreamingTargetRadius สามารถถูกลบออกจากลูกค้าแม้จะไม่มีแรงกดดันด้านหน่วยความจำ (ในโหมดนี้ ลูกค้าไม่เคยลบอินสแตนซ์ที่อยู่ภายในรัศมีเป้าหมาย ยกเว้นในสถานการณ์ที่มีหน่วยความจำต่ำ)

แนะนำ
ใช้ Opportunistic เพื่อให้ลูกค้าสามารถเก็บขยะเนื้อหาได้อย่างเข้มงวด ลดการใช้หน่วยความจำอย่างมีนัยสำคัญและช่วยป้องกันการชนกันของหน่วยความจำหมด

จุดโฟกัสการทำซ้ำ

โดยค่าเริ่มต้น การสตรีมจะเกิดขึ้นรอบ ๆ PrimaryPart ของตัวละครของผู้เล่นท้องถิ่น แม้ว่าคุณจะสามารถระบุจุดโฟกัสการทำซ้ำที่แตกต่างกันได้ผ่าน Player.ReplicationFocus

คุณยังสามารถเพิ่มและลบจุดโฟกัสการทำซ้ำเพิ่มเติมผ่าน Player:AddReplicationFocus() และ Player:RemoveReplicationFocus() เพื่อเปิดใช้งานการสตรีมในหลายพื้นที่ของเกมอย่างไดนามิก

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

การสตรีมเชิงพยากรณ์

การสตรีมเชิงพยากรณ์เป็นฟีเจอร์ที่เลือกใช้ซึ่งใช้สัญญาณของเอนจินเพื่อคาดการณ์การเคลื่อนไหวของผู้เล่นและสตรีมพื้นที่ที่ผู้เล่นน่าจะต้องการในไม่ช้า เมื่อเปิดใช้งานโดยการตั้งค่า PredictiveStreamingMode เป็น Enabled จะช่วยลดการหยุดชะงักของการสตรีมและการปรากฏของภาพโดยไม่ต้องเปลี่ยนแปลงโค้ด

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

เมื่อ PredictiveStreamingMode เป็น Enabled ฟีเจอร์การพยากรณ์ต่อไปนี้จะเปิดใช้งาน:

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

การควบคุมการสตรีมโมเดล

เพื่อหลีกเลี่ยงปัญหาการสตรีมในระดับโมเดลและลดการใช้ WaitForChild() คุณสามารถปรับแต่งวิธีการที่ Models และลูกหลานของมันสตรีมผ่านคุณสมบัติ ModelStreamingMode

Nonatomic

ตามค่าเริ่มต้น โมเดลจะเป็น Nonatomic และจะสตรีมเข้า/ออกตามว่าค่า Workspace.ModelStreamingBehavior ถูกตั้งค่าเป็น Legacy (ค่าเริ่มต้น) หรือ Improved

Legacy

เมื่อ Workspace.ModelStreamingBehavior ถูกตั้งค่าเป็น Legacy (ค่าเริ่มต้น) คอนเทนเนอร์ Model และลูกหลานที่ ไม่ใช่ BasePart เช่น Scripts จะทำซ้ำไปยังลูกค้าเมื่อผู้เล่นเข้าร่วม จากนั้นเมื่อมีสิทธิ์ ลูกหลาน BasePart ของโมเดลจะถูกสตรีมเข้า

Improved

เมื่อ Workspace.ModelStreamingBehavior ถูกตั้งค่าเป็น Improved พฤติกรรมการสตรีมโมเดลจะแตกต่างกันไปตามว่าโมเดลมีลูกหลาน BasePart หรือไม่มี:

  • โมเดลที่มีลูกหลาน BasePart จะถูกสตรีม เข้า เฉพาะเมื่อ หนึ่ง ในลูกหลาน BasePart ของมันมีสิทธิ์ในการสตรีมเข้า ในขณะนั้น โมเดลและ BasePart ที่มีสิทธิ์จะถูกสตรีมเข้าไปพร้อมกับลูกหลานที่ ไม่ใช่ BasePart ของโมเดล

    เมื่อ BasePart ตัวสุดท้ายของโมเดลถูกสตรีม ออก โมเดลเองจะถูกสตรีมออกพร้อมกับมัน

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

Atomic

หาก Model ถูกตั้งค่าเป็น Atomic ลูกหลานทั้งหมดของมันจะถูกสตรีมเข้าไปพร้อมกันเมื่อมีลูกหลาน BasePart ที่มีสิทธิ์ในการสตรีมเข้า ดังนั้น สคริปต์ฝั่งลูกค้าที่ต้องการเข้าถึงอินสแตนซ์ ภายใน โมเดลจะต้องใช้ WaitForChild() บนโมเดลเอง แต่ไม่ใช่บนลูกหลาน MeshPart หรือ Part เนื่องจากจะถูกส่งพร้อมกับโมเดล

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

แผนภาพแสดงการสตรีมโมเดลแบบ Atomic พร้อมกับลูกหลาน.

Persistent

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

แผนภาพแสดงการสตรีมโมเดลแบบ Persistent พร้อมกับลูกหลาน.

PersistentPerPlayer

โมเดลที่ตั้งค่าเป็น PersistentPerPlayer จะทำงานเหมือนกับ Persistent สำหรับผู้เล่นที่ถูกเพิ่มโดยใช้ Model:AddPersistentPlayer() สำหรับผู้เล่นคนอื่น ๆ พฤติกรรมจะเหมือนกับ Atomic คุณสามารถย้อนกลับโมเดลจากการคงอยู่ของผู้เล่นได้ผ่าน Model:RemovePersistentPlayer()

การปรับแต่งหน้าจอหยุดชะงัก

สมมติว่า Workspace.StreamingIntegrityMode ถูกตั้งค่าเป็น PauseOutsideLoadedArea ที่แนะนำ เกมจะหยุดชะงักหากผู้เล่นเคลื่อนที่เข้าสู่ภูมิภาคของโลกที่ยังไม่ได้ถูกสตรีมไปยังพวกเขา ในกรณีเหล่านี้ คุณสมบัติ Player.GameplayPaused จะบ่งบอกถึงสถานะการหยุดชะงักปัจจุบันของผู้เล่นซึ่งสามารถใช้ร่วมกับการเชื่อมต่อ GetPropertyChangedSignal() เพื่อแสดงหรือซ่อน GUI ที่กำหนดเอง

LocalScript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- ปิดการแจ้งเตือนหยุดชะงักเริ่มต้น
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- แสดง GUI ที่กำหนดเอง
else
-- ซ่อน GUI ที่กำหนดเอง
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)

การดีบักระหว่างการทำงาน

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

  1. เปิดการซ้อนทับดีบัก Network Summary ผ่าน ShiftCtrlF3 (Windows) หรือ ShiftF3 (Mac).
  2. เมื่อการซ้อนทับดีบักเปิดขึ้น ให้กด Shift1 ซ้ำ ๆ เพื่อหมุนเวียนผ่านแผงที่มีอยู่ แผงที่สี่คือมุมมองดีบัก Streaming ซึ่งแสดงข้อมูลที่มีประโยชน์ในระหว่างการทำงาน:
    • การตั้งค่าการสตรีมที่ใช้งานอยู่
    • ภูมิภาคที่ถูกโหลดอยู่ในขณะนี้ (สตรีมเข้า)
    • พฤติกรรมและสถานะการสตรีม

เมื่อเปิดใช้งานแล้ว ภูมิภาคที่มีสีจะปรากฏในมุมมอง 3D:

สีคำอธิบาย
น้อยกว่า StreamingMinRadius
มากกว่าหรือเท่ากับ StreamingMinRadius และน้อยกว่า StreamingTargetRadius
เท่ากับ StreamingTargetRadius
มากกว่า StreamingTargetRadius
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ