Karmaşık fiziksel mekanizmaları desteklemek için oyunculara sorunsuz ve yanıt veren bir deneyim sunma amacıyla, Roblox fizik motoru, hesaplamaların sunucu ile tüm bağlı istemciler arasında dağıtıldığı dağıtılmış fizik sistemini kullanır. Bu sistem içinde, motor, fiziksel olarak simüle edilen BaseParts parçalarının ağ mülkiyetini ya bir istemciye ya da sunucuya atar, böylece fizik hesaplamalarının yükü bölünür.
İstemciler, sahip oldukları parçalarla daha yanıt veren fizik etkileşimleri deneyimler, çünkü sunucuyla iletişime geçme süresi yoktur. Ağ mülkiyeti ayrıca, fizik hesaplamalarının bireysel istemciler arasında bölünebilmesi sayesinde sunucu performansını da artırır; böylece sunucu diğer görevleri önceliklendirebilir.
BasePart mülkiyeti
Varsayılan olarak, sunucu herhangi bir BasePart'ın mülkiyetini elinde tutar. Ayrıca, sunucu her zaman sabitlenmiş BaseParts parçalarının sahibidir ve bunların mülkiyetini manuel olarak değiştiremezsiniz.
Bir istemcinin donanım kapasitesine ve oyuncunun Player.Character'ının sabitlenmemiş bir BasePart'a yakınlığına dayanarak, motor otomatik olarak o parçanın mülkiyetini istemciye atar. Bu nedenle, bir oyuncunun karakterine yakın parçaların oyuncu mülkiyetine geçmesi daha olasıdır.
Montaj mülkiyeti
Eğer fizik tabanlı bir mekanizmanın sabitlenmiş parçaları yoksa, o mekanizma içindeki bir montaj üzerinde mülkiyet ayarlamak, mekanizmadaki her montaj için aynı mülkiyeti ayarlar.
Eğer daha geniş bir mekanizmanın parçası olmayan yalnız bir montajı sabitlerseniz, mülkiyeti sunucuya geçer, çünkü sunucu her zaman sabitlenmiş BaseParts parçalarına sahiptir. Aynı montajı sabitlemeyi bıraktığınızda, önceki mülkiyet durumu kaybolur ve motor tarafından otomatik olarak yeniden yönetilmeye başlar.
Daha geniş bir montajlar mekanizmasında bir montajı sabitlerseniz, mülkiyeti sunucuya geçer, ancak diğer montajların mülkiyeti değişmez. Aynı montajı sabitlemeyi bıraktığınızda, daha önce belirlenen mülkiyeti eski haline döner.
Mülkiyet ayarlama
Karmaşık fizik etkileşimlerine sahip oyunlarda veya doğrudan kontrol atamanız gereken durumlarda, BasePart:SetNetworkOwner() aracılığıyla mülkiyeti ayarlayabilirsiniz.
Bir aracın, sürücü için bir VehicleSeat nesnesi ve bir yolcu için bir Seat nesnesi içerdiğini varsayalım; her ikisi de araç montajına dahildir. Varsayılan mülkiyet kurallarına göre, bir oyuncu karakteri Seat (yolcu) içine oturduğunda ve ardından başka bir oyuncu VehicleSeat (sürücü) içine atladığında, yolcu araca fiziksel mülkiyet kazanır çünkü önce oturdu. Sürücünün girişi tanınmadan önce birkaç ağ döngüsü beklemesi gerekecek ve araç daha az yanıt verir hale gelecektir.
Aşağıdaki Script, sürücüye manuel olarak ağ mülkiyetini atayarak bunu düzeltir. İçinde, VehicleSeat nesnesi, Occupant'ı üzerinde oturan Humanoid olarak ayarlar, böylece script, bir oyuncu koltuğa oturduğunda koltuğun Changed olayını dinler. Sürücü koltuktan ayrıldığında, aracın ağ mülkiyeti otomatik yönetim ile geri döner ve BasePart:SetNetworkOwnershipAuto() çağrılır.
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
-- Karakterden oyuncuyu al
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Koltuk boşaldığında mülkiyeti sıfırla
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Mülkiyeti görselleştirme
Ağ mülkiyeti hata ayıklamaya yardımcı olmak için, Stüdyo, oyun testi sırasında nesnelerin etrafında renkli konturlar çizebilir.
| Kontur rengi | Açıklama | |
|---|---|---|
| (yeşil) | Sizin istemciniz parçayı sahipleniyor ve simüle ediyor. | |
| (kırmızı) | Parça, istemcinizin simüle ettiği ancak hala başka bir şeye ait olduğu bir "buffer bölgesi" içindedir. İstemciniz bu parçanın mülkiyetini alabilir veya reddedebilir. | |
| (beyaz/gri) | Sunucu veya başka bir istemci, otomatik ağ mülkiyeti veya part:SetNetworkOwner() aracılığıyla açık atama ile parçanın sahibi. | |
| (siyah) | Parça ne sunucuya ne de istemciye ait değildir. Bu parçaya fizik uygulanmayacaktır. | |
Ağ mülkiyeti görselleştirmesini etkinleştirmek için:
3D görüntüleme alanının sağ üst köşesindeki görselleştirme seçenekleri düğmesine tıklayın.

Açılır menüde, Ağ sahipleri seçeneğini açın.
Güvenlik endişeleri
Roblox, bir istemcinin BasePart üzerindeki fizik hesaplamalarını doğrulayamaz. İstemciler bunu kötüye kullanabilir ve sunucuya hatalı veriler gönderebilir, örneğin, BasePart'ı teleport ederek, duvarlardan geçmesini sağlayarak veya havada uçurabilir.
Ayrıca, BasePart.Touched olayları ağ mülkiyetine bağlıdır; bu, bir istemcinin sahip olduğu BasePart üzerinde Touched olaylarını ateşleyebileceği ve sunucuya gönderebileceği anlamına gelir, sunucu bunun bir şeye dokunduğunu görmese bile. Örneğin, bir istemci, bir kılıcın haritanın diğer tarafındaki bir oyuncuya hasar vermesini sağlamak için olayları script enjeksiyonu aracılığıyla ateşleyebilir, bu nedenle istemciler tarafından ateşlenen böyle olayların geçerliliğini kontrol etmek önemlidir.
Roblox oyunları için detaylı güvenlik taktikleri ve hile önleme taktikleri için Güvenlik Taktikleri ve Hile Önleme ile ilgili bölümü inceleyin.