เจ้าของเครือข่าย

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

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

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

การเป็นเจ้าของส่วนฐาน

โดยค่าเริ่มต้นเซิร์ฟเวอร์จะเก็บสิทธิ์การเป็นเจ้าของของใดๆ BasePartนอกจากนี้เซิร์ฟเวอร์ เสมอ เป็นเจ้าของที่ติดอยู่ BaseParts และคุณไม่สามารถเปลี่ยนเจ้าของได้ด้วยตนเอง

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

สิทธิ์การดูแลระบบการประกอบ

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

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

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

การตั้งค่าเจ้าของ

ในประสบการณ์ที่มีการโต้ตอบทางฟิสิกส์ที่ซับซ้อนหรือในกรณีที่คุณต้องการกำหนดการควบคุมโดยตรงคุณสามารถตั้งค่าสิทธิ์ผ่านการโทรไปยังเซิร์ฟเวอร์ได้ที่ BasePart:SetNetworkOwner()

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

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


local Players = game:GetService("Players")
local vehicleSeat = script.Parent
vehicleSeat.Changed:Connect(function(prop)
if prop == "Occupant" then
local humanoid = vehicleSeat.Occupant
if humanoid then
-- รับผู้เล่นจากตัวละคร
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- รีเซ็ตการเป็นเจ้าของเมื่อที่นั่งว่าง
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)

แสดงเจ้าของได้

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

สีขอบคําอธิบาย
(สีเขียว)ไคลเอนต์ของคุณเป็นเจ้าของส่วนและกําลังจําลองมัน
(สีแดง)ส่วนนี้อยู่ภายใน "โซนบัฟเฟอร์" ที่ไคลเอนต์ของคุณจำลองมัน แต่ยังคงเป็นของบางอย่างอื่นไคลเอนต์ของคุณอาจได้รับสิทธิ์หลังจากนี้หรืออาจปฏิเสธได้
(ขาว/เทา)เซิร์ฟเวอร์หรือไคลเอนต์อื่นเป็นเจ้าของส่วนผ่านการเป็นเจ้าของเครือข่ายอัตโนมัติหรือจากการกำหนดเป้าหมายโดยเฉพาะผ่าน part:SetNetworkOwner() .

เพื่อเปิดใช้งานการแสดงผลเจ้าของเครือข่าย:

  1. คลิกที่ปุ่มตัวเลือกการแสดงผล ในมุมขวาบนของวิวพอร์ต 3D

    A close up view of the 3D viewport with the Visualization Options button indicated in the upper-right corner.
  2. ในเมนูการเลื่อนลง เปิดใช้งาน เจ้าของเครือข่าย .

ข้อกังวลด้านความปลอดภัย

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

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

ดู กลยุทธ์ด้านความปลอดภัยและการลดความเสี่ยง สำหรับกลยุทธ์ด้านความปลอดภัยและกลยุทธ์การลดความเสี่ยงสำหรับประสบการณ์ Roblox