ในประสบการณ์ ให้บริการสตรีมมิงเอซิเชียนส์ได้โดยใช้เครื่องมือในตัวที่เร็วขึ้นและเชื่อถือได้ในการโหลดและขนส่งเนื้อหา 3D และรายการที่เกี่ยวข้องในภูมิภาคของโลกได้ เพื่อปรับปรุ
- เวลาเข้าร่วมเร็วขึ้น — ผู้เล่นสามารถเริ่มเล่นในส่วนหนึ่งของโลกในขณะที่ผู้เล่นอื่นๆ กำลังโหลดในพื้นหลัง
- ประสิทธิภาพการใช้หน่วยความจำ — สามารถเล่นเกมบนอุปกรณ์ที่มีหน่วยความจำน้อยลงได้เนื่องจากเนื้อหาถูกสตรีมออกอย่างไดนามิก โลกที่เข้าถึงได้มากขึ้นและรายละเอียดขึ้นสามารถเล่นได้บนอุปกร
- ประสิทธิภาพที่ปรับปรุง — อัตราเฟรมที่ดีขึ้นและประสิทธิภาพเนื่องจากเซิร์ฟเวอร์สามารถใช้เวลาน้อยลงและการแสดงผลน้อยลงได้เนื่องจากการเปลี่ยนแปลงระหว่างโลกและผู้เล่นในมันไม่ได้
- ระดับรายละเอียด — โมเดลระยะไกลและพื้นที่ยังคงมองเห็นได้แม้ว่าพวกเขาจะไม่ถูกสตรีมไปยังลูกค้าโดยเฉพาะอย่างยิ่ง เพื่อให้ประสบการณ์เหมาะสมโดยไม่ต้องเสียสละวิวของพื้นหลัง
การเปิดใช้งานการสตรีมมิ่ง
การสตรีมมิงเปิดใช้งานผ่านสมบัติสมบัติ StreamingEnabled ของวัตถุ Workspace ใน Studio สมบัติสมบัตินี้ไม่สามารถตั้งค่าในสคริปต์ได้ การสตรีมมิงเปิดใช้งานสำหรับสถานที่ใหม่ที่สร้างขึ้นใน Studio
เมื่อเปิดใช้งานแล้ว ขอแนะนำให้คุณปฏิบัติตามมาตรการต่อไปนี้:
- เนื่องจากลูกค้ามักจะไม่มี Workspace ทั้งหมดให้ใช้งานในท้องถิ่นดังนั้นใช้เครื่องมือ/API ที่เหมาะสมเพื่อให้แน่ใจว่ามี
- ลดการวาง 3D บนพื้นที่ Workspace ด้านนอก เนื้อหาในคอนเทนเนอร์เช่น ReplicatedStorage หรือ ReplicatedFirst ไม่สามารถสตรีมได้และอาจส่งผลกระทบต่อเวลาการเข้าร่วมและกา
- ตั้งค่าผู้เล่นอย่างเป็นการแยก ReplicationFocus เฉพาะในสถานการณ์ที่ไม่ใช้ Player.Character เท่านั้น ในกรณีเหล่านี้ให้แน่ใจว่าโฟกัสอยู่ใกล้กับวัต
พฤติกรรมทางเทคนิค
การสตรีมใน
ตามปกติ, เมื่อผู้เล่นเข้าร่วมประสบการณ์ที่มีการเรียกร้องสตรีมเปิดใช้งาน, รุ่นใน Workspace จะถูกเรียกร้องไปยังลูกค้า, ยกเว้น</ยกเว้น</ยกเว้น</ยกเว้น</ยกเว้น</ยกเว้น</ยกเว้น</ยกเว้น</ยกเว้
- ลูกหลานของตัวอย่างด้านบน
- ไม่เลียนแบบติดตั้ง
การเล่นเกมเซิร์ฟเวอร์อาจจะสตรีมตัวอย่างตามที่ต้องการไปยังลูกค้าตามที่ต้องการ
พฤติกรรมของแบบจำลอง
โมเดลตั้งค่าไม่ใช่ปฏิสัมพันธ์ปกติเช่น Atomic สตรีมในภายใต้กฎข้อบังคับพิเศษตามที่ระบุใน Per-Model Streaming Controls อย่างไรก็ตามโมเดลที
เมื่อ ModelStreamingBehavior กำหนดเป็น ปกติ / มรดก คอนเทนเนอร์ 1> Class.Model1> และบุตรหลานของมันเช่น 4> Class.Script|Scripts4>
การสตรีมออก
การเล่นเกม(ลบออกจากภาพเรือของผู้เล่น) ภายในภาพเรือของพวกเขาตามกา
เมื่อตัวแทนออก, มันจะถูกผูกไว้ที่ nil ผลการค้นหาLuau สถานะใด ๆ ที่มีอยู่จะเชื่
เพื่อคาดการออกอากาศเพิ่มเติม ตรวจสอบสถานการณ์เหล่านี้:
สถานการณ์ | ตัวอย่าง | พฤติกรรมการสตรีม |
---|---|---|
ส่วนหนึ่งถูกสร้างขึ้น ที่นี่ ผ่าน Class.Instance.new() ใน Instance.new() | ในเกม "จับธง" คุณสร้างและแนบส่วนหมวกสีน้ำเงินให้กับผู้เล่นทุกคนในทีมสีน้ำเงินผ่าน LocalScript | ส่วนนี้ไม่ได้ถูกเลียนแบบไปยังเซิร์ฟเวอร์ และไม่ได้รวมอยู่ในการสตรีมออก ยกเว้น คุณจะทำให้เป็นลูกหลานของส่วนที่มีอยู่ในเซิร์ฟเวอร์ เช่น ส่วนภายในตัวละครของผู้เล่น |
ส่วนหนึ่งเป็น คลอนจากที่นี่เรื่อยๆ ไปยัง Class.ReplicatedStorage ผ่าน Class.Instance:Clone() ใน Class.LocalScript . | ตัวละครนักเวทย์สามารถใช้เวทย์มนตร์โดยการเปิดใช้งาน Tool ซึ่งเป็นวัตถุที่รวมถึงหลาย เอฟเฟ็กต์พิเศษ ใน ReplicatedStorage และเป็นบรรพบุรุษของพื้นที่ที่ตั้งอยู | ชิ้นส่วนนี้ไม่ได้ถูกเลียนแบบไปยังเซิร์ฟเวอร์ และไม่ต้องจ่ายค่าลิขสิทธิ์จนกว่าคุณจะทำให้มันเป็นลูกหลานของชิ้นส่วนที่มีอยู่ในเซิร์ฟเวอร์ |
ส่วนหนึ่งเป็น รีแม่น์ไปยัง จาก ReplicatedStorage ไปยังพื้นที่งานผ่านทาง LocalScript | หมวก "นักเวทย์" ถูกเก็บไว้ใน ReplicatedStorage เมื่อผู้เล่นเลือกที่จะเล่นในทีมของนักเวทย์หมวกจะย้ายไปยังโมเดลตัวละครของพวกเขาผ่าน LocalScript | ส่วนนี้ยังคงมีสิทธิ์สตรีมออกเนื่องจากมาจากเซิร์ฟเวอร์และถูกเรียกให้มาที่ ReplicatedStorage หลีกเลี่ยงรูปแบบนี้เนื่องจากสาเหตุผลทางการสื่อสารระหว่างเครื่องคอมพิวเตอร์แล |
พฤติกรรมของแบบจำลอง
หากคุณติดตั้ง ModelStreamingBehavior ไว้ที่ ปรับปรุง เครื่องอาจจะสตรีม ปกติ โมเดลเมื่อพวกเขามีคุณสมบัติสำหรับการสตรีมออกไป โดยอาจปลดปล่อยพื้นที่เก็บข้อม
ภายใต้ ปรับปรุง การสตรีมมิงโมเดล การสตรีมออกจาก ปกติ ( ไม่สปอต ) โมเดลจะขึ้นอยู่กับว่าโมเดลเป็น 1>
- แบบจำลองภาพเท่านั้นจะไหลออกเมื่อลำดับล่าสุดของเขา BasePart ลำดับลงสตรีมออกด้วยเนื่องจากส่วนหนึ่งของพื้นที่จำลองภาพอาจอยู่ใกล้กับผู้เล่น/การเลียนแบบจุดโฟกัสและอื่น ๆ ออกไป
- แม้ว่าจะเป็นแบบไม่มีพื้นที่ แต่ก็ไม่สามารถสตรีมได้เมื่อลูกบรรพบุรุษสตรีมออก ซึ่งเทียบเท่ากับพฤติกรรมการสตรีมออกของมรดก
อัตราการประกอบและกลไก
เมื่ออย่างน้อยหนึ่งส่วนของ การประกอบ สตรีม
หมายเหตุว่าการประกอบด้วยชิ้นส่วน ติดผนัง จะได้รับการประกอบด้วยชิ้นส่วนที่ไม่มีผนังด้านล่าง:
การประกอบการ | พฤติกรรมการสตรีม |
---|---|
อะไหล่ที่ไม่มีติดตั้งเท่านั้น | การประกอบทั้งหมดจะถูกส่งเป็นหน่วยอะตอม |
ติดตั้ง ราก | เฉพาะชิ้นส่วน อุปกรณ์เสริม และข้อจํากัดที่จำเป็นสําหรับการเชื่อมโยงชิ้นส่วนที่ถูกสตรีมไปยังรากของต้นไม้เท่านั้นที่ถูกสตรีมในด้วยกัน |
ความแลคในการตั้งเวลา
อาจมีความแลคเล็กน้อยของ ~10 มิลลิวินาทีระหว่างเมื่อสร้างส่วนบนเซิร์ฟเวอร์และเมื่อได้รับการเลียนแบบไปยังลูกค้า ในแต่ละสถานการณ์ต่อไปนี้คุณอาจต้องใช้
สถานการณ์ | ตัวอย่าง | พฤติกรรมการสตรีม |
---|---|---|
A LocalScript ทำให้เรียก RemoteFunction ไปยังเซิร์ฟเวอร์เพื่อสร้างส่วนหนึ่ง | ผู้เล่นเปิดใช้งาน Tool ในพื้นที่จัดเก็บข้อมูลของเซิร์ฟเวอร์เพื่อสร้างส่วนหนึ่งบนเซิร์ฟเวอร์ที่ผู้เล่นทุกคนสามารถดูและใช้งานได้ | เมื่อระยะไกลฟังก์ชันกลับไปที่ลูกค้าส่วนอาจยังไม่มีอยู่แม้ว่าส่วนจะอยู่ใกล้กับลูกค้าโฟกัสและในพื้นที่สตรีม |
ส่วนหนึ่งถูกเพิ่มเข้าไปในตัวละครที่มีบนเซิร์ฟเวอร์ผ่าน Script และ RemoteEvent ได้ถูกเรียกไปยังลูกค้า | เมื่อผู้เล่นเข้าร่วมทีมตำรวจ ส่วน "ตราตำรวจ" ที่เก็บไว้ใน ServerStorage จะถูกคลอนและแนบมาที่โมเดลตัวละครของผู้เล่น ส่วน RemoteEvent จะถูกเรียกใช้และส่งไป | แม้ว่าลูกค้าจะได้รับสัญญาณเหตุการณ์ แต่ไม่มีการรับประกันว่าชิ้นส่วนนั้นถูกสตรีมไปยังลูกค้าแล้ว |
ชิ้นส่วนที่อยู่ในเขตที่มองไม่เห็นบนเซิร์ฟเวอร์และเรียกใช้ RemoteEvent บนเครื่องคลิก | ผู้เล่นเตะลูกฟุตบอลใส่ประตู แล้วเหตุการณ์ "เตะแล้วเตะ" จะเกิดขึ้น | ผู้เล่นอื่นที่อยู่ใกล้ประตูอาจเห็นกิจกรรม "goal scored" ก่อนที่ลูกบอลจะถูกสตรีมไปยังพวกเขา |
สตรีมมิ่ง โปรพีเพอร์ตี้
ตัวแปรต่อไปนี้ควบคุมวิธีการสตรีมอินสแตนซ์ใช้กับประสบการณ์ของคุณ สมุดทั้งหมดนี้เป็น non-scriptable และต้องการตั้งค่าใน วิดีโอเวิร์กสเปซเอาท์โอบเจ็ตใน Studio
พฤติกรรมการจัดการแบบรุ่น
ควบคุมว่า ปกติ ( นอนอะตอม ) โมเดลจะถูกเรียกใหม่เมื่อผู้เล่นเข้าร่วมหรือไม่ได้รับการส่งเมื่อจำเป็น หากค่านี้กำหนดเป
โหมดการจัดการความน่าเชื่อถือ
ประสบการณ์ของคุณอาจปฏิสัมพันธ์ในวิธีที่ไม่ได้ตั้งใจหากผู้เล่นย้ายไปยังภูมิภาคของโลกที่ไม่ได้ถูกสตรีมไปยังพวกเขา คุณสมบัติ ความสะอาดของการสตรีม เสนอ
สตรีมมินรัศมี
สมบัติ StreamingMinRadius ระบุรัศมีรอบตัวละครของผู้เล่น (หรือ ReplicationFocus ) ในกรณีใด ๆ ที่สตรีมจะดำเนินการด้วยความสามารถสูงสุด ควรระวังเมื่อเพิ่มรายก
รัศมีเป้าหมาย
สมบัติ StreamingTargetRadius ควบคุมระยะทางสูงสุดจากตัวละครของผู้เล่น (หรือ ReplicationFocus ) ในซินดิคที่สตรีมใน สตรีมใน. โปรดทราบว่าเครื่องยนต์สามารถเก็บรองเท้าได้มากข
StreamingTargetRadius ที่เล็กลงจะลดการใช้งานเซิร์ฟเวอร์ เนื่องจากเซิร์ฟเวอร์จะไม่สตรีมในตัวอย่างเพิ่มเติมนอกจากค่าตั้งค่า อย่างไรก็ตามรัศมีเป็นระยะไกลสุดที่ผู้เล่นจะสามารถเ
พฤติกรรมการสตรีม
สมบัติ StreamOutBehavior ตั้งค่าพฤติกรรมการ "สตรีมออก" ตามหนึ่งในค่าต่อไปนี้:
การตั้งค่า | พฤติกรรมการสตรีม |
---|---|
ปกติ | พฤติกรรมปกติ, ตอนนี้เหมือนกับ LowMemory |
หน่วยความจำต่ำ | ลูกค้าสตรีมออกชิ้นส่วนเท่านั้นในสถานการณ์หน่วยความจำต่ำและอาจลบเนื้อหา 3D จนกว่าจะมีรัศมีขั้นต่ำ |
โอปโอนิสต์ | ภาพรอบ ๆ ภายนอก StreamingTargetRadius สามารถลบออกจากเครื่องได้แม้ว่าจะไม่มีความกดหน้าจอง ในโหมดนี้ เครื่องไม่เคยลบตัวอินสแตนซ์ที่อยู่ใกล้กับรัศมีเป้าหมายมากกว่าในสถานการณ์ความจำต่ำ ยกเว้นใ |
การควบคุมการสตรีมแบบรุ่นต่อรุ่น
ในระดับโลก, คุณสมบัติ ModelStreamingBehavior ช่วยให้คุณควบคุมวิธีการที่มอเติร์นถูกสตรีมในขณะที่เข้าร่วม นอกจากนี้, เพื่อห
ค่าเริ่มต้น / นอนอะตอม
เมื่อ Model ติดตั้งเป็น ค่าเริ่มต้น หรือ Nonatomic การจัดการการสตรีมจะแตกต่างกันไปตามว่า 2> ModelStreamingBehavior2> ติดตั้งเป็น 5>ค่าเริ่มต้น</
โมเดลการจัดการการสตรีม | พฤติกรรมทางเทคนิค |
---|---|
ปกติ ( มรดก ) | แบบจำลองจะถูกเลียนแบบเมื่อผู้เล่นเข้าร่วม นี่อาจทำให้เกิดการส่งมากขึ้นในระหว่างการโหลด การเก็บข้อมูลในหน่วยความจำ และความ |
ปรับปรุง | แบบจำลองจะถูกส่งเมื่อต้องการเท่านั้น โดยมีแนวโน้มว่าจะเพิ่มความเร็วในการเข้าร่วม |
ดู พฤติกรรมทางเทคนิค สำหรับรายละเอียดเพิ่มเติม
อะตอม
หาก Model ถูกเปลี่ยนเป็น Atomic ทั้งหมดของบรรพบุรุษของมันจะถ
แบบอะตอมจะถูกสตรีมออกเฉพาะเมื่อส่วนหลักของมันทั้งหมดมีคุณสมบัติสำหรับการสตรีมออก ตรงนี้ทั้งหมดจะถูกสตรีมออกด้วยกัน หากเฉพาะส่วนหนึ่งของแบบอะตอมจะถูกสตรีมออกเท่านั้น
สคริปต์ท้องถิ่น
-- ไม่มีแบบอะตอมในเวลาการโหลด; ใช้ WaitForChild()local model = workspace:WaitForChild("Model")-- ชิ้นส่วนลูกหลานสตรีมในกับแบบและเข้าถึงได้ทันทีlocal meshPart = model.MeshPartlocal part = model.Part
คงที่
แม้ว่าจะไม่มีการสตรีมมิ่งในอุปกรณ์เครื่องให้ แต่ก็ไม่สามารถสตรีมออกได้ใ
สคริปต์ท้องถิ่น
-- ไม่มีรุ่นที่มีอยู่ในเวลาการโหลด; ใช้ WaitForChild()local model = workspace:WaitForChild("Model")-- ชิ้นส่วนลูกหลานสตรีมในกับแบบและเข้าถึงได้ทันทีlocal meshPart = model.MeshPartlocal part = model.Part
รับรองตลอดชีวิต
แบบจำลองตั้งค่าเป็น PersistentPerPlayer มีพฤติกรรมเหมือน Persistent สำหรับผู้เล่นที่เพิ่มโดยใช้ Model:AddPersistentPlayer() สำหรับผู้เล่นอื่น ๆ พ�
ร้องขอการสตรีมพื้นที่
หากคุณตั้งค่า 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)
LocalScript - เหตุการณ์ระยะไกล
local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")local teleportTarget = Vector3.new(50, 2, 120)-- เปิดตัวเหตุการณ์รีโมทteleportEvent:FireServer(teleportTarget)
ตรวจจับการสตรีมของเครื่อง
ในบางกรณีอาจจำเป็นต้องตรวจจับเมื่อวัตถุสตรีมเข้าหรือออกและตอบสนองต่อเหตุการณ์นั้น รูปแบบที่เป็นประโยชน์ในการตรวจจับการสตรีมคือด้านล่างนี้:
โดยใช้ส่วน แท็ก ของโปรไฟล์ของตัวอินสแตนซ์หรือ เครื่องมือจัดการแท็กของ Studio ให้เป็นธง CollectionService สำหรับทุกตัวอินสแตนซ์ที่ได้รับผลกระทบ
จาก Class.LocalScript เดียว ตรวจจับเมื่อวัตถุที่มีแท็กสตรีมเข้าหรือออกผ่าน GetInstanceAddedSignal() และ
LocalScript - ตรวจจับการสตรีมมิงบริการของ CollectionServicelocal CollectionService = game:GetService("CollectionService")local tagName = "FlickerLightSource"local random = Random.new()local flickerSources = {}-- ตรวจจับว่ามีการสตรีมมิงชิ้นส่วนที่มีแท็กใหม่หรือไม่ในขณะนี้for _, light in CollectionService:GetTagged(tagName) doflickerSources[light] = trueendCollectionService:GetInstanceAddedSignal(tagName):Connect(function(light)flickerSources[light] = trueend)CollectionService:GetInstanceRemovedSignal(tagName):Connect(function(light)flickerSources[light] = nilend)-- ห่วงโซ่ขยายwhile true dofor light in flickerSources dolight.Brightness = 8 + random:NextNumber(-0.4, 0.4)endtask.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 ภายนอกพื้นที่ที่กำลังสตรีมจะไม่มีให้เห็นโดยปกติ อย่างไรก็ตาม คุณสามารถสอนให้เครื่องยนต์เรนเดอร์ได้รับการร
การตั้งค่าแบบฟอร์ม | พฤติกรรมการสตรีม |
---|---|
StreamingMesh | เปิดใช้งานการเรียกตัวอักษรของผู้โกหกเพื่อแสดงเมื่อแบบจำลองไม่มีอยู่ในลูกค้า |
ถูกปิดใช้งาน / อัตโนมัติ | รุ่นหายไปเมื่ออยู่นอกรัศมีการสตรีม |
เมื่อใช้เมชรุ่นลองตัวตน กำลังติดตาม:
- เมชรุมตัวอื่น ออกแบบมาเพื่อให้เห็นได้ที่ 1024 studs ออกจากกล้อง หรือต่อไป หากคุณลด StreamingTargetRadius ลงเป็นจำนวนเงินที่เล็กลงเช่น 256 เมชรุมตัวอื่นอาจไม่สมบูรณ์ป
- หากรุ่น และ รุ่นลูกหลานของมันตั้งค่าไว้ที่ StreamingMesh เท่านั้นรุ่นกำเนิดบนสุดจะถูกเรนเดอร์เป็น เน็ตเวิร์ท โดยรอบทุกเมชทั้งหมดภายใต้ร
- ไม่รองรับเนื้อผิว; เนื้อผิวปลอมจะถูกเรนเดอร์เป็นเนื้อผิวที่เรียบเรียน
- ขณะที่ Model ยังไม่ถูกสตรีมอย่างสมบูรณ์ แต่เนื้อหาปลอมจะถูกเรนเดอร์แทนที่จากแต่ละส่วนของแบบจำลอง
- เมช imposter ไม่มีความสมเหตุสมผลทางกายภาพและพวกเขาจะไม่มีความสมเหตุสมผลในการใช้งาน raycastingการตรวจจับความสัมพันธ์ และการจำลองภาพเคลื่อนไหว
- การแก้ไขรุปแบบใน Studio เช่น การเพิ่ม/ลบ/ปรับเปลี่ยนชิ้นส่วนลูกหรือรีเพอร์ทสี จะปรับปรุงเมชรุปแบบโดยอัตโนมัติ