網路擁有權 是 Roblox 引擎中較為細緻且常被誤解的方面之一。當玩家擁有某個部件或組件的網路擁有權時,他們對這些物件的物理模擬擁有完全的權限。預設情況下,伺服器會將未固定的部件的網路擁有權授予鄰近的玩家角色,藉此分散物理模擬的負載。這個系統改善了響應性,但也帶來了每位開發者必須了解的重大安全問題。
了解網路擁有權
當客戶端擁有部件的網路擁有權(包括它們的角色)時,他們可以訪問:
組件操作:
- 傳送到任何位置。
- 這可以用來快速獲取擁有權並控制伺服器所允許的任何未固定部件和組件。
- 操作它們的移動和狀態,例如飛行或改變速度。
- 破壞者可以將他們的人類角色的步行速度設置為任何值。屬性可以在本地被修改,而不會在本地客戶端觸發任何事件,且這些屬性變更無法從本地腳本中讀取。
- 播放任意動畫並操作動畫狀態。
- 繞過物理障礙並改變其碰撞。
物理操作
- 控制任何未固定部件或機制的位置和旋轉,包括在 CFrames 中複製 Inf 或 NaN 組件。 將部件速度設置為極值(包括 Inf 或 NaN),可能會干擾其他未固定部件/組件的物理,即使這些不是破壞者所擁有。 這通常用於拋擲其他玩家角色和鄰近的部件。 操作 Touched 事件的觸發,包括完全不觸發 Touched。
如果您的體驗需要遊戲關鍵的完全未固定的部件或組件,考慮使用網路擁有權 API 來手動設置擁有權或關閉自動擁有權。
移動驗證
在競爭性體驗中,伺服器端對玩家移動的驗證對於模擬完整性至關重要,因為客戶端控制角色的移動和物理。然而,由於不同的遊戲機制,並不存在通用解決方案。
傳統方法在複雜情況下往往不夠理想。對於競爭性射擊遊戲,簡單的距離隨時間的計算可能足夠,但在涉及車輛、飛行或複雜互動的物理密集型體驗中卻失效。驗證還必須考慮網路延遲。
在伺服器權限可用之前,實施客戶端驗證的開發者必須瞭解有效的方法有很大的差異。基本的啟發式方法可能會標記連接不穩定的無辜玩家,而簡單的速度計算在具有複雜移動系統的體驗中會失效。位置更新受到網路延遲的影響,需要進行時間上的平均。許多開發者發現,漏桶風格的累計器對於處理突發移動效果良好,同時防止持續的違規行為。
實際實施通常需要將移動投影到特定平面(例如,用於地面移動的 XZ 平面),以避免懲罰合法的垂直移動,同時檢測橫向傳送。具有合法傳送機制的體驗需要明確的豁免系統。驗證頻率、容忍水平和執行策略應根據每個體驗的具體要求進行調整。