การสตรีมตัวอย่างอินสแตนซ์

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

การสตรีมตัวอย่างในประสบการณ์ เปิดใช้งานแบบไดนามิก ช่วยให้ Roblox Engine สามารถโหลดและถอด 3D เนื้อหาและตัวอย่างที่เกี่ยวข้องในภูมิภาคของโลกได้อย่างไดนามิกสิ่งนี้สามารถปรับปรุงประสบการณ์ผู้เล่นโดยรวมได้หลายวิธี เช่น:

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

เปิดใช้งานการสตรีม

การสตรีมตัวอย่างเปิดใช้งานผ่านคุณสมบัติ StreamingEnabled ของวัตถุ พื้นที่ทำงาน ใน Studioคุณสมบัตินี้ไม่สามารถตั้งค่าได้ในสคริปต์การสตรีมเปิดใช้งานโดยค่าเริ่มต้นสำหรับสถานที่ใหม่ที่สร้างใน Studio

The Properties window with the StreamingEnabled property enabled.

เมื่อเปิดใช้งานแล้ว ขอแนะนำให้คุณปฏิบัติตามแนวทางต่อไปนี้:

  • เนื่องจากไม่มีลูกค้ามักจะมีทั้งหมด Workspace ที่มีอยู่ในท้องถิ่น ใช้เครื่องมือ/API ที่เหมาะสมเพื่อให้แน่ใจว่าตัวอย่างมีอยู่ก่อนที่จะพยายามเข้าถึงใน LocalScriptตัวอย่างเช่นใช้ การควบคุมการสตรีมตามรูปแบบ , ตรวจจับการสตรีมตัวอย่าง หรือใช้ WaitForChild() บนวัตถุที่อาจไม่มีอยู่
  • ลดการวางเนื้อหา 3D นอก Workspaceเนื้อหาในคอนเทนเนอร์เช่น ReplicatedStorage หรือ ReplicatedFirst ไม่สามารถสตรีมได้และอาจส่งผลเสียต่อเวลาเข้าร่วมและการใช้หน่วยความจำ
  • หากคุณย้ายตัวละครของผู้เล่นโดยการตั้งค่า CFrame ของมัน, ทำเช่นนั้นจากด้านเซิร์ฟเวอร์ Script และใช้ คําขอการสตรีม เพื่อโหลดข้อมูลรอบตำแหน่งใหม่ของตัวละครได้เร็วขึ้น
  • ตั้งค่าผู้เล่นด้วยตนเอง ReplicationFocus เฉพาะในสถานการณ์ที่ไม่ซ้ำกันเช่นในประสบการณ์ที่ไม่ใช้ Player.Characterในกรณีเหล่านี้ ตรวจสอบให้แน่ใจว่าการโฟกัสอยู่ใกล้กับวัตถุที่ผู้เล่นควบคุมเพื่อให้แน่ใจว่าเนื้อหายังคงสตรีมต่อไปรอบจุดสัมผัสของผู้เล่น

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

สตรีมใน

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

จากนั้นในระหว่างการเล่นเกม เซิร์ฟเวอร์อาจสตรีมตัวอย่างที่จำเป็นให้กับไคลเอนต์ตามที่จำเป็น

Diagram showing when various instances and their descendants in the Workspace stream in.
1 พื้นที่จะได้รับการปฏิบัติอย่างไม่ซ้ำกันในการที่ตัวอย่างจะส่งไปยังไคลเอนต์เมื่อประสบการณ์โหลด แต่พื้นที่ภูมิประเทศจะสตรีมเฉพาะเมื่อจำเป็นเท่านั้น

พฤติกรรมของโมเดล

โมเดลตั้งค่าเป็นพฤติกรรมไม่เป็นค่าเริ่มต้นเช่น สตรีมอะตอม ภายใต้กฎพิเศษตามที่อธิบายไว้ใน การควบคุมการสตรีมตามรูปแบบอย่างไรก็ตาม โมเดลเริ่มต้น (ไม่อะตอม) จะถูกส่งแตกต่างกันขึ้นอยู่กับว่า ModelStreamingBehavior ถูกตั้งค่าเป็น ปกติ ( มรดก ) หรือ ปรับปรุง

The Properties window with the ModelStreamingBehavior property set to Default.

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

Diagram showing default model stream in behavior.

สตรีมออก

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

เมื่อตัวอย่างสตรีมออก มันจะถูกผูกกับ nil ผลการค้นหาLuau ที่มีอยู่เชื่อมต่อกลับได้หากตัวอย่างสตรีมกลับมาผลที่ตามมาคือการลบสัญญาณเช่น ChildRemoved หรือ DescendantRemoving ไฟบน พ่อ หรือ บรรพบุรุษ แต่ตัวอย่างเองไม่ถูกทําลายในเชิงเดียวกับการเรียก Instance:Destroy()

เพื่อคาดการณ์การออกอากาศต่อไป ตรวจสอบสถานการณ์เหล่านี้:

กรณีตัวอย่างพฤติกรรมการสตรีม
ส่วนหนึ่งถูกสร้างขึ้น ท้องถิ่น ผ่าน Instance.new() ใน LocalScriptในเกม "โขมยธง" คุณสร้างและติดตั้งชิ้นส่วนหมวกสีฟ้าให้กับผู้เล่นในทีมสีฟ้าทั้งหมดผ่าน LocalScriptส่วนไม่ถูกสําเนาไปยังเซิร์ฟเวอร์ และจะได้รับการยกเว้นจากการสตรีมออก เว้นแต่ คุณจะทําให้มันเป็นลูกหลานของส่วนที่มีอยู่บนเซิร์ฟเวอร์ เช่น ส่วนภายในโมเดลตัวละครของผู้เล่น
ส่วนหนึ่งถูกโคลนจากท้องถิ่นไปยัง **** ผ่าน ReplicatedStorage ใน Instance:Clone() ใน LocalScriptตัวละครพ่อมดโจมตีคาถาโดยการเปิดใช้งาน Tool ซึ่งวัตถุรวมถึงเอฟเฟกต์พิเศษหลายอย่าง ถูกโคลนจาก ReplicatedStorage และถูกส่งไปยังพื้นที่ทำงานที่ตำแหน่งของพ่อมดส่วนไม่ถูกสําเนาไปยังเซิร์ฟเวอร์ และจะได้รับการยกเว้นจากการสตรีมออก เว้นแต่ คุณจะทําให้มันเป็นลูกหลานของส่วนที่มีอยู่บนเซิร์ฟเวอร์
ส่วนหนึ่งถูกซ่อมแซม **** จาก ReplicatedStorage ไปยังพื้นที่ทำงานผ่าน LocalScriptหมวกของ "พ่อมด" จะถูกเก็บไว้ใน ReplicatedStorageเมื่อผู้เล่นเลือกที่จะเล่นในทีมของนักมายากล หมวกจะถูกย้ายไปยังโมเดลตัวละครของพวกเขาผ่าน LocalScriptส่วนยังคงมีสิทธิ์สำหรับการสตรีมออกเนื่องจากมาจากเซิร์ฟเวอร์และถูกสําเนาไปที่ ReplicatedStorageหลีกเลี่ยงลายนี้เนื่องจากทําให้เกิดการไม่สอดคล้องระหว่างไคลเอนต์และเซิร์ฟเวอร์และส่วนอาจไหลออก; แทน, คลอน ส่วน

พฤติกรรมของโมเดล

หากคุณตั้ง ModelStreamingBehavior เป็น ปรับปรุง เครื่องยนต์อาจสตรีมโมเดล เริ่มต้น ( ไม่อะตอม ) เมื่อพวกเขามีสิทธิ์สตรีมออก อาจปลดปล่อยหน่วยความจำบนไคลเอนต์และลดจำนวนตัวอย่างที่ต้องการการอัปเดตคุณสมบัติ

The Properties window with the ModelStreamingBehavior property set to Improved.

ภายใต้ ปรับปรุง พฤติกรรมการสตรีมโมเดลที่สตรีมออกจาก เริ่มต้น ( ไม่อะตอม ) โมเดลจะขึ้นอยู่กับว่าโมเดลเป็น ทางกายภาพ (มี BasePart ) หรือ ไม่ใช่ทางกายภาพ (ไม่มี BasePart )

  • โมเดลพื้นที่จะสตรีมออกอย่างสมบูรณ์เมื่อมีการสตรีมลูกหลานสุดท้าย BasePart เพียงครั้งเดียวเท่านั้น เนื่องจากส่วนพื้นที่บางส่วนของโมเดลอาจอยู่ใกล้กับผู้เล่น/จุดโฟกัสการเลียนแบบ และบางส่วนอยู่ไกล
  • โมเดลที่ไม่ใช่พื้นที่จะสตรีมออกเฉพาะเมื่อบรรพบุรุษสตรีมออก เทียบเท่ากับพฤติกรรมการสตรีมมรดก

ชิ้นส่วนและเครื่องมือ

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

โปรดทราบว่าชิ้นส่วนที่มีการยึดด้วย ถูกยึด จะได้รับการปฏิบัติอย่างแตกต่างเล็กน้อยจากชิ้นส่วนที่มีเฉพาะชิ้นส่วนที่ไม่ได้ถูกยึด:

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

ความล่าช้าเวลา

อาจมีความล่าช้าเล็กน้อยประมาณ ~10 มิลลิวินาตระหนักระหว่างเมื่อส่วนถูกสร้างบนเซิร์ฟเวอร์และเมื่อมันถูกส่งต่อไปยังไคลเอนต์ในแต่ละสถานการณ์ต่อไปนี้คุณอาจต้องใช้ WaitForChild() และเทคนิคอื่นๆ แทนที่จะคาดว่าการอัปเดตเหตุการณ์และคุณสมบัติจะเกิดขึ้นเสมอในเวลาเดียวกับการสตรีมส่วนหนึ่ง

กรณีตัวอย่างพฤติกรรมการสตรีม
A LocalScript สร้างการเรียก RemoteFunction ไปยังเซิร์ฟเวอร์เพื่อสร้างส่วนผู้เล่นเปิดใช้งาน Tool ท้องถิ่นเพื่อสร้างส่วนบนเซิร์ฟเวอร์ที่ผู้เล่นทุกคนสามารถเห็นและโต้ตอบได้เมื่อฟังก์ชันระยะไกลกลับไปยังไคลเอนต์ ส่วนอาจยังไม่มีอยู่ แม้ว่าส่วนจะอยู่ใกล้กับจุดโฟกัสของไคลเอนต์และอยู่ภายในพื้นที่สตรีมก็ตาม
ส่วนหนึ่งถูกเพิ่มลงในโมเดลตัวละครบนเซิร์ฟเวอร์ผ่าน Script และ RemoteEvent ถูกยิงไปยังไคลเอนต์เมื่อผู้เล่นเข้าร่วมทีมตํารวจ "ส่วนตราตำรวจ" ที่เก็บไว้ใน ServerStorage จะถูกคลอนและแนบกับโมเดลตัวละครของผู้เล่นA RemoteEvent ถูกยิงและรับโดยไคลเอนต์ของผู้เล่นนั้นเพื่ออัปเดตองค์ประกอบ UI ท้องถิ่นแม้ว่าไคลเอนต์จะได้รับสัญญาณกิจกรรม แต่ก็ไม่มีการรับประกันว่าส่วนนั้นจะถูกสตรีมไปยังไคลเอนต์นั้นแล้ว
ส่วนชนกับภูมิภาคที่มองไม่เห็นบนเซิร์ฟเวอร์และกระตุ้นให้เกิด RemoteEvent บนไคลเอนต์ผู้เล่นเตะลูกฟุตบอลเข้าไปในเป้าหมาย กระตุ้นเหตุการณ์ "ทำประตูได้"ผู้เล่นอื่นที่อยู่ใกล้เป้าหมายอาจเห็นอีเวนต์ "goal scored" ก่อนที่ลูกบอลจะถูกสตรีมไปยังพวกเขา

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

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

The Properties window with the ModelStreamingBehavior, StreamingIntegrityMode, StreamingMidRadius, StreamingTargetRadius, and StreamOutBehavior property highlighted.

พฤติกรรมการสตรีมรูปแบบ

ควบคุมว่า ค่าเริ่มต้น ( ไม่อะตอม ) รูปแบบจะถูกสําเนาเมื่อผู้เล่นเข้าร่วมหรือจะส่งเฉพาะเมื่อจําเป็นหากคุณสร้างคุณสมบัตินี้เป็น ปรับปรุง โมเดลใน Workspace จะถูกส่งไปยังลูกค้าเฉพาะตอนที่จำเป็น อาจเร่งเวลาการเข้าร่วมได้ดู พฤติกรรมทางเทคนิค สำหรับรายละเอียดเพิ่มเติม

โหมดความสมบูรณ์ของการสตรีม

ประสบการณ์ของคุณอาจทำงานในลักษณะที่ไม่คาดคิดหากผู้เล่นย้ายไปยังภูมิภาคของโลกที่ยังไม่ถูกสตรีมไปยังพวกเขาคุณลักษณะการสตรีมความสมบูรณ์มอบวิธีการหลีกเลี่ยงสถานการณ์ที่อาจเป็นปัญหาได้ สถานการณ์ โปรดดูคู่มือ Enum.StreamingIntegrityMode สำหรับรายละเอียดเพิ่มเติม

รัศมีการสตรีมขั้นต่ำ

คุณสมบัติ StreamingMinRadius บ่งบอกรัศมีรอบตัวละครของผู้เล่น (หรือ ReplicationFocus ) ในกรณีที่สตรีมมีลําดับความสําคัญสูงสุดควรใช้ความระมัดระวังเมื่อเพิ่มค่าเริ่มต้นเนื่องจากการทำเช่นนั้นจะต้องใช้หน่วยความจำเพิ่มเติมและกว้างขวางเวลาในการรับส่งของเซิร์ฟเวอร์เพิ่มเติมในค่าใช้จ่ายของส่วนประกอบอื่น

รัศมีเป้าหมายการสตรีม

คุณสมบัติ StreamingTargetRadius ควบคุมระยะสูงสุดที่ห่างจากตัวละครของผู้เล่น (หรือ ReplicationFocus ) ในกรณีที่สตรีมในโปรดทราบว่าเครื่องยนต์สามารถเก็บตัวอย่างที่โหลดไว้ก่อนหน้านี้นอกรัศมีเป้าหมายได้ ตามที่หน่วยความจำอนุญาต

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

พฤติกรรมการสตรีมออก

คุณสมบัติ StreamOutBehavior ตั้งค่าพฤติกรรมการสตรีมออกตามหนึ่งในค่าต่อไปนี้:

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

การควบคุมการสตรีมตามโมเดลแต่ละรายการ

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

The Properties window with the ModelStreamingMode property set to Default. The property is also highlighted.

ค่าเริ่มต้น / ไม่อะตอม

เมื่อ Model ถูกตั้งค่าเป็น ปกติ หรือ ไม่อะตอม พฤติกรรมการสตรีมจะแตกต่างกันขึ้นอยู่กับว่า ModelStreamingBehavior ถูกตั้งค่าเป็น ปกติ ( มรดก ) หรือ ปรับปรุง

พฤติกรรมการสตรีมรูปแบบพฤติกรรมทางเทคนิค
เริ่มต้น ( มรดก )โมเดลจะถูกเลียนแบบเมื่อผู้เล่นเข้าร่วมอาจทำให้เกิดผลลัพธ์เพิ่มเติมในการส่งตัวอย่างมากขึ้นในระหว่างการโหลด, ตัวอย่างเพิ่มเติมที่เก็บไว้ในหน่วยความจำ, และความซับซ้อนเพิ่มเติมสำหรับสคริปต์ที่ต้องการเข้าถึงสายตระกูลของโมเดลตัวอย่างเช่น แยก LocalScript จะต้องใช้ WaitForChild() บนลูกหลาน BasePart ภายในโมเดล
ปรับปรุง โมเดลจะถูกส่งเฉพาะเมื่อจำเป็นเท่านั้น อาจเร่งเวลาเข้าร่วมได้

ดู พฤติกรรมทางเทคนิค สำหรับรายละเอียดเพิ่มเติม

อะตอม

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

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

A diagram showing Atomic model streaming along with children.
สคริปท์ท้องถิ่น

local Workspace = game:GetService("Workspace")
-- โมเดลอะตอมไม่มีอยู่ในเวลาโหลด; ใช้ WaitForChild()
local model = Workspace:WaitForChild("Model")
-- ส่วนลูกหลานไหลเข้ากับโมเดลและสามารถเข้าถึงได้ทันที
local meshPart = model.MeshPart
local part = model.Part

ถาวร

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

A diagram showing Persistent model streaming along with children.
สคริปท์ท้องถิ่น

local Workspace = game:GetService("Workspace")
-- โมเดลถาวรไม่มีอยู่ในเวลาโหลด; ใช้ WaitForChild()
local model = Workspace:WaitForChild("Model")
-- ส่วนลูกหลานไหลเข้ากับโมเดลและสามารถเข้าถึงได้ทันที
local meshPart = model.MeshPart
local part = model.Part

สิ่งที่คงอยู่ต่อผู้เล่น

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

ขอการสตรีมพื้นที่

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

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

สคริปต์ - เทเลพอร์ตตัวละครผู้เล่น

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")
local function teleportPlayer(player, teleportTarget)
-- ขอการสตรีมรอบตำแหน่งเป้าหมาย
player:RequestStreamAroundAsync(teleportTarget)
-- เทเลพอร์ตตัวละคร
local character = player.Character
if character and character.Parent then
local currentPivot = character:GetPivot()
character:PivotTo(currentPivot * CFrame.new(teleportTarget))
end
end
-- เรียกฟังก์ชันเทเลพอร์ตเมื่อไคลเอนต์ส่งอีเวนต์ระยะไกล
teleportEvent.OnServerEvent:Connect(teleportPlayer)
สคริปท้องถิ่น - การเปิดเหตุการณ์ระยะไกล

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")
local teleportTarget = Vector3.new(50, 2, 120)
-- ยิงเหตุการณ์ระยะไกล
teleportEvent:FireServer(teleportTarget)

ตรวจสอบการสตรีมตัวอย่าง

ในบางกรณีจำเป็นต้องตรวจจับเมื่อวัตถุสตรีมเข้าหรือออกและตอบสนองต่อเหตุการณ์นั้นลายที่มีประโยชน์สำหรับการตรวจจับการสตรีมมีดังนี้:

  1. โดยใช้ส่วน แท็ก อินสแตนซ์เครื่องมือแท็กของ Studio กำหนดแท็กโลจิสติก CollectionService ให้กับวัตถุทั้งหมดที่ได้รับผลกระทบ

  2. จากเดียว LocalScript , ตรวจจับเมื่อวัตถุที่มีแท็กไหลเข้าหรือออกผ่าน GetInstanceAddedSignal() และ GetInstanceRemovedSignal() , จัดการวัตถุตามนั้นตัวอย่างเช่น โค้ดต่อไปนี้เพิ่มวัตถุที่มีแท็ก Light ในลูป "flicker" เมื่อสตรีมเข้าและลบพวกเขาเมื่อสตรีมออก

    LocalScript - การตรวจจับการสตรีมบริการคอลเลกชัน

    local CollectionService = game:GetService("CollectionService")
    local tagName = "FlickerLightSource"
    local random = Random.new()
    local flickerSources = {}
    -- ตรวจจับส่วนที่มีแท็กใหม่และส่งสตรีมอยู่ในหรือออก
    for _, light in CollectionService:GetTagged(tagName) do
    flickerSources[light] = true
    end
    CollectionService:GetInstanceAddedSignal(tagName):Connect(function(light)
    flickerSources[light] = true
    end)
    CollectionService:GetInstanceRemovedSignal(tagName):Connect(function(light)
    flickerSources[light] = nil
    end)
    -- วงจรสลับ
    while true do
    for light in flickerSources do
    light.Brightness = 8 + random:NextNumber(-0.4, 0.4)
    end
    task.wait(0.05)
    end

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

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

สคริปท์ท้องถิ่น

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)

ระดับรายละเอียดรูปแบบ

เมื่อเปิดใช้งานการสตรีมแล้ว Models ด้านนอกพื้นที่ที่สตรีมอยู่ในปัจจุบันจะไม่ปรากฏโดยค่าเริ่มต้นอย่างไรก็ตาม คุณสามารถสั่งให้เครื่องเรนเดอร์สร้างเมช "imposter" ความละเอียดต่ำสำหรับโมเดลที่ไม่ปรากฏในไคลเอนต์ผ่านคุณสมบัติ LevelOfDetail ของโมเดลแต่ละรายการ

LevelOfDetail property indicated for Model instance
A globe model displays in its actual level of detail.
รูปแบบจริง
The same globe model displays as a low resolution imposter mesh with rough edges that obscure the globe's details.

เมทขนาดต่ำ "imposter"
>

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

เมื่อใช้เมชของผู้ละเมิด กำลังติดตาม:

  • เมชของผู้ละเมิดถูกออกแบบมาให้เห็นได้ที่ 1024 สตัดจากกล้อง หรือไกลกว่านั้นหากคุณลด StreamingTargetRadius เป็นค่าที่เล็กกว่ามากเช่น 256 เมชของผู้ละเมิดอาจไม่เป็นที่ยอมรับทางสายตาสำหรับรูปแบบที่พวกเขาแทนที่
  • หากรูปแบบ และ รูปแบบลูกหลานทั้งหมดถูกตั้งค่าเป็น StreamingMesh เท่านั้นรูปแบบบรรพบุรุษระดับสูงจะถูกเรนเดอร์เป็นเมชของผู้บุกรุก ซึ่งห่อหุ้มทุกรูปร่างภายใต้บรรพบุรุษและรูปแบบลูกหลานของมันเพื่อประสิทธิภาพที่ดีกว่า แนะนำให้คุณใช้ ปิดใช้งาน สำหรับรูปแบบลูกหลาน
  • ไม่สนับสนุนเทกเจอร์; เมชของผู้ละเมิดจะถูกแสดงเป็นเมชที่ราบรื่น
  • ในขณะที่ Model ไม่ได้ถูกสตรีมอย่างสมบูรณ์ แต่ตาข่ายของผู้ละเมิดจะถูกแสดงแทนส่วนต่างๆ ของโมเดลเมื่อชิ้นส่วนแต่ละชิ้นถูกสตรีมเข้ามาแล้ว พวกเขาจะเรนเดอร์และเมชของผู้ละเมิดจะถูกเพิกเฉย
  • เมชของผู้ละเมิดไม่มีความสำคัญทางกายภาพและพวกเขากระทำเป็นไม่มีอยู่เมื่อเทียบกับ raycasting , การตรวจจับการชน และการจำลองฟิสิกส์
  • การแก้ไขโมเดลใน Studio เช่น เพิ่ม/ลบ/ย้ายส่วนลูกหรือรีเซ็ตสี จะอัปเดตเมชตัวแทนโดยอัตโนมัติ