플레이어에게 매끄럽고 응답성이 높은 경험을 제공하면서 복잡한 물리 메커니즘을 지원하려면 Roblox 물리 엔진은 서버와 모든 연결된 클라이언트 간의 계산을 분산하는 분
클라이언트는 서버와의 통신이 없기 때문에 자신이 보유부품에 더 나은 반응성의 물리 인터랙션을 경험합니다, 더 적은 대기 시간이 있기 때문에 네트워크 소유도 서버 성능을 향상시킵니다, 물리 계산을 개별 클라이언트 간에 분산시켜 서버가 다른 작업을 우선화할 수 있습니다.
BasePart 소유
기본적으로 서버는 모든 BasePart의 소유권을 유지합니다. 또한, 서버는 항상 Class.BasePart|BaseParts를 앵커 로 소유하며 소유자를 수동으로 변경할 수 없습니다.
클라이언트의 하드웨어 용량 및 플레이어의 Player.Character 근접성에 따라 엔진은 자동으로 해당 부품의 소유권을 클라이언트에게 할당합니다. 따라서, 플레이어 캐릭터 근처에 있는 부품은 더 높은 확률로 플레이어가 소유하게 됩니다.
자산 소유권
물리 기반 메커니즘에 고정된 부품이 없으면 소유권 설정 내 조립 내에 있는 메커니즘에 대한 소유권을 설정하면 메커니즘 내의 모든 2>조립2>에 대한 소유권을 설정합니다.
더 넓은 메커니즘의 일부가 아닌 외부 조립체를 앵커링하는 경우, 그 소유권은 서버로 이동하므로 서버는 항상 앵커링된 Class.BasePart|BaseParts 를 가지고 있습니다. 동일한 조립체를 다시 앵커링하면 이전 소유 상태가 잃어지고 엔진에 자동 처리로 돌
더 넓은 메커니즘의 하나의 조립 내에 하나의 조립을 앵커로 하면 조립의 소유자는 서버로 이동하지만 다른 조립의 소유자는 변경되지 않습니다. 동일한 조립을 다시 앵커로 하면 이전에 설정된 소유가 다시 적용됩니다.
소유권 설정
복잡한 물리 상호 작용이 있거나 직접 제어를 할 필요가 있는 경우 서버 사이드 호출을 통해 BasePart:SetNetworkOwner() 에 소유권을 설정할 수 있습니다.
드라이버와 승객 모두를 위한 VehicleSeat 개체가 포함된 차량 조립을 고려하십시오. 기본 소유 규칙으로 플레이어
다음 Script 수정은 이를 수동으로 네트워크 소유권을 운전자에게 할당하여 수행합니다.
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() 에서 소유하고 있습니다. |
네트워크 소유 시각화를 활성화하려면:
3D 뷰포트의 오른쪽 상단 모서리에 있는 시각화 옵션 버튼을 클릭하십시오.
드롭다운 메뉴에서 네트워크 소유자 를 토글합니다.
보안 우려
Roblox는 클라이언트가 BasePart 을 소유할 때 물리 계산을 확인할 수 없습니다. 클라이언트는 이것을 악용하여 서버에 나쁜 데이터를 보낼 수 있습니다, 예를 들어 클라이언트가 BasePart 을 통과하거나 벽을 통과하여 가는 것과 같이.
또한, BasePart.Touched 이벤트는 네트워크 소유권에 연결되므로 서버네트워크 소유권을 얻을 수 있습니다. 즉, 클라이언트가 네트워크 소유권을 �
Roblox 경험에 대한 자세한 보안 전략 및 속임수 방지 전략은 보안 전략 및 속임수 방지를 참조하십시오.