인스턴스 스트리밍

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

게임 내 인스턴스 스트리밍은 Roblox 엔진이 Workspace에서 3D 콘텐츠 및 관련 인스턴스를 동적으로 로드하고 언로드할 수 있게 합니다. 이는 여러 가지 방법으로 전반적인 플레이어 경험을 개선할 수 있습니다:

  • 빠른 입장 시간
    — 플레이어는 세계의 한 부분에서 게임을 시작할 수 있고, 그 사이에 더 많은 세계가 백그라운드에서 로드됩니다.
  • 메모리 효율성
    — 콘텐츠가 동적으로 스트리밍되기 때문에 메모리가 적은 장치에서도 게임을 실행할 수 있습니다. 보다 몰입감 있고 세밀한 세계를 더 넓은 범위의 장치에서 즐길 수 있습니다.
  • 향상된 성능
    — 서버가 세계와 그 안의 플레이어 간의 변화를 동기화하는 데 드는 시간과 대역폭이 줄어들기 때문에 더 나은 프레임 속도와 성능을 제공합니다. 클라이언트는 현재 플레이어와 관련 없는 인스턴스를 업데이트하는 데 드는 시간을 줄입니다.
  • 상세 수준
    — 설정된 경우, 원거리 모델, 플랫폼 아바타 및 지형은 클라이언트에 스트리밍되지 않을 때도 여전히 보이므로 게임이 최적화되면서도 배경 시각적 요소가 완전히 희생되지 않습니다.

인스턴스 스트리밍은 기본적으로 Studio에서 생성된 새 장소에 대해 기본적으로 활성화된 Workspace.StreamingEnabled 속성을 통해 제어됩니다. 이 속성은 스크립트에서 설정할 수 없습니다.

스트리밍 활성화 속성이 활성화된 속성 창.

기술적 동작

범위

스트리밍 로직 및 기능은 오직 Workspace의 자식 인스턴스에만 적용되며, ReplicatedStorageReplicatedFirst와 같은 다른 컨테이너에 저장된 인스턴스는 스트리밍의 대상이 될 수 없습니다. 예를 들어, ReplicatedStorage원자 모델을 배치한다고 해서 원자 복제가 보장되지 않습니다.

스트림 인

플레이어가 인스턴스 스트리밍이 활성화된 게임에 참가할 때:

  1. Workspace의 인스턴스가 클라이언트에 복제됩니다 다음 항목 제외:

    ModelsWorkspace.ModelStreamingBehaviorImproved로 설정된 경우 비원자 (기본값)으로 설정됨

    위 인스턴스의 자식

  2. 게임 플레이 중에 서버는 게임의 스트리밍 속성, 플레이어 위치, 클라이언트 장치 성능 및 기타 조건에 따라 위에서 언급된 지연된 범주의 인스턴스를 클라이언트에 스트리밍할 수 있습니다.

스트림 아웃

게임 플레이 중, 클라이언트는 Workspace.StreamOutBehavior에 의해 설정된 동작에 따라 플레이어의 Workspace에서 BaseParts의 지역을 제거할 수 있습니다. 이 과정은 복제 초점에서 가장 멀리 있는 지역부터 시작하여 필요한 경우 더 가까운 지역으로 이동합니다. Workspace.StreamingMinRadius 범위 내의 지역은 절대 스트리밍되지 않습니다.

BasePart 자식이 없는 Model 예를 들어, 단순히 스크립트와 같은 비-BasePart 인스턴스의 "컨테이너"로 사용되는 경우 스트리밍 아웃에서 면제됩니다 그것이 BasePart의 자식이 될 경우를 제외하고.

조립체

물리적 조립체는 관련된 ConstraintsAttachments와 함께 으로 스트리밍되어 클라이언트에서 일관된 물리 업데이트를 보장합니다. 유일한 예외는 조립체가 고정되어 있을 경우로, 이 경우 스트리밍 반경 내의 BaseParts만 스트리밍됩니다.

조립체는 모든 BaseParts가 스트리밍 아웃하기 위한 자격이 부여될 때까지 스트리밍 아웃되지 않습니다.

스트리밍 속성

다음 속성은 인스턴스 스트리밍이 귀하의 게임에 어떻게 적용되는지를 제어합니다. 이 속성들은 모두 스크립트화할 수 없으며 Studio에서 Workspace 객체에 설정해야 합니다.

속성설명
EnableSLIMAvatars게임의 아바타 캐릭터에 대해 SLIM 모델이 생성되는지를 제어합니다. 활성화되면 아바타는 다른 모델에 대한 Model.LevelOfDetailSLIM으로 설정할 때와 같은 방식으로 SLIM을 사용하여 렌더링됩니다.
ModelStreamingBehavior비원자 (기본값) 모델이 스트리밍 인/아웃되는 방식.

추천
Improved를 사용하여 Models에 대한 가장 효율적인 스트리밍을 활성화합니다.
StreamingIntegrityMode플레이어가 스트리밍되지 않은 세계의 지역으로 이동할 경우 게임이 의도치 않은 방식으로 동작할 수 있습니다. 이 속성은 그러한 잠재적으로 문제를 일으킬 수 있는 상황을 피할 수 있는 방법을 제공합니다.

추천
PauseOutsideLoadedArea를 사용하여 불필요하게 또는 너무 자주 정지하지 않으면서 게임 플레이 무결성을 균형 있게 유지합니다. 또한 일시 정지 화면을 사용자화할 수 있습니다.
StreamingMinRadius이 속성은 인스턴스가 가장 높은 우선 순위로 스트리밍되는 복제 초점 주변의 반지름을 나타냅니다. 기본값을 증가시킬 때는 주의해야 하며, 그렇게 하면 다른 구성 요소의 비용을 들여 더 많은 메모리와 더 많은 서버 대역폭이 필요해집니다.

추천
엔진이 저사양 장치용으로 게임의 크기를 축소할 수 있는 최대한을 극대화하려면 기본값 64를 사용하십시오.
StreamingTargetRadius이 속성은 인스턴스가 스트리밍되는 최대 거리인 복제 초점 주위의 범위를 제어합니다. 엔진은 메모리가 허락하는 한, 대상 반경을 초과하여 이전에 로드된 인스턴스를 유지할 수 있습니다.

작은 StreamingTargetRadius는 서버의 작업량을 줄여줍니다. 서버는 설정된 값 이상으로 추가 인스턴스를 스트리밍하지 않기 때문입니다. 그러나 목표 반경은 플레이어가 게임의 전체 세부 사항을 볼 수 있는 최대 거리이기도 하므로 이 둘 간에 균형을 이룰 수 있는 값을 선택해야 합니다.

추천
기본값 1024를 사용하여 고사양 장치의 플레이어 시야와 합리적인 메모리 사용량 간의 균형을 잘 맞추십시오.
StreamOutBehavior이 속성은 Enum.StreamOutBehavior의 값에 따라 스트리밍 아웃 동작을 설정합니다. LowMemory (기본값)으로 설정하면 클라이언트는 메모리가 부족한 상황에서 최소 반경을 넘어서는 지역만 스트리밍 아웃합니다. Opportunistic로 설정하면, 메모리 압박이 없을 때에도 StreamingTargetRadius를 넘는 지역이 클라이언트에서 제거될 수 있습니다(이 모드에서는 클라이언트가 저용량 상황을 제외하고는 목표 반경 내의 인스턴스를 제거하지 않습니다).

추천
Opportunistic을 사용하여 클라이언트가 콘텐츠를 적극적으로 가비지 수집할 수 있도록 하여 메모리 사용량을 크게 줄이고 메모리 부족으로 인한 충돌을 방지하십시오.

복제 초점

기본적으로 스트리밍은 로컬 플레이어의 캐릭터의 PrimaryPart 주변에서 발생하지만 Player.ReplicationFocus를 통해 다른 복제 초점 지점을 지정할 수 있습니다.

추가 복제 초점을 Player:AddReplicationFocus()Player:RemoveReplicationFocus()를 통해 추가 및 제거하여 게임의 여러 지역에서 스트리밍을 동적으로 활성화할 수도 있습니다.

클라이언트 측 물리 시뮬레이션은 서버 권한이 구현될 때 예측 및 재시뮬레이션을 포함하여 스트리밍된 지역에서만 발생하며, 로컬로 생성된 인스턴스 및 Persistent 인스턴스에서도 마찬가지입니다. 캐릭터에서 멀리 떨어진 상태에서도 여전히 시뮬레이션을 유지하고 싶다면, 이러한 인스턴스 근처에 추가 복제 초점을 생성하십시오.

모델 스트리밍 제어

모델별로 스트리밍 문제를 피하고 WaitForChild() 사용을 최소화하기 위해 Models 및 그 자식 인스턴스를 통해 ModelStreamingMode 속성을 사용자화할 수 있습니다.

비원자

기본적으로 모델은 Nonatomic이며, Workspace.ModelStreamingBehaviorLegacy (기본값) 또는 Improved로 설정된에 따라 스트리밍됩니다.

레거시

Workspace.ModelStreamingBehaviorLegacy (기본값)로 설정되면, Model 컨테이너와 그 -BasePart 자식(예: Scripts)은 플레이어가 들어올 때 클라이언트에 복제됩니다. 그런 다음, 자격이 갖춰지면 모델의 BasePart 자식이 스트리밍됩니다.

향상된

Workspace.ModelStreamingBehaviorImproved로 설정되면 모델 스트리밍 동작은 모델에 BasePart 자식이 포함되는지 여부에 따라 달라집니다.

  • BasePart 자식을 포함하는 모델의 경우, 하나BasePart 자식이 스트리밍할 수 있는 자격이 주어질 때만 으로 스트리밍됩니다. 그 시점에 모델과 해당 자격이 주어진 BasePart가 스트리밍을 하며, 모델의 -BasePart 자식도 함께 스트리밍됩니다.

    모델의 마지막 남은 BasePart아웃으로 스트리밍될 때, 모델 자체도 함께 스트리밍됩니다.

  • BasePart 자식이 없는 모델(예: 비‑BasePart 인스턴스만 있는 "컨테이너"로 사용되는 경우)은 플레이어가 입장한 직후에 클라이언트에 복제됩니다. 이러한 유형의 모델은 스트리밍 아웃에서 면제됩니다 그것이 BasePart의 자식이 될 경우를 제외하고.

원자

ModelAtomic으로 설정되면, 초기 자식 모두가 스트리밍 가능할 때 BasePart의 자식이 자격이 주어질 때 함께 스트리밍됩니다. 결과적으로 모델 내부의 인스턴스에 액세스해야 하는 클라이언트 측 스크립트는 모델 자체에서 WaitForChild()를 사용해야 하지만, 자식 MeshPart 또는 Part에 대해서는 모델과 함께 전송되므로 사용하지 않아도 됩니다.

원자 모델은 모든 자식 파트가 스트리밍 아웃 가능할 때만 스트리밍 아웃되며, 이 시점에 전체 모델이 함께 스트리밍 아웃됩니다.

자식과 함께 원자 모델 스트리밍을 보여주는 다이어그램입니다.

지속적인

Persistent 모델은 일반적인 스트리밍 인/아웃에 적용되지 않습니다. 이들은 플레이어가 입장한 후 곧바로 원자 단위로 전송되며, Workspace.PersistentLoaded 이벤트가 발생하기 전에 전송됩니다. 지속 모델과 그 자식은 결코 스트리밍 아웃되지 않지만, 클라이언트 측 스크립트에서 스트리밍을 안전하게 처리하기 위해서는 PersistentLoaded 이벤트가 발생할 때까지 기다려야 합니다.

자식과 함께 지속 모델 스트리밍을 보여주는 다이어그램입니다.

플레이어당 지속적인

PersistentPerPlayer 로 설정된 모델은 Model:AddPersistentPlayer()를 통해 추가된 플레이어에게 대해 Persistent와 동일하게 작동합니다. 다른 플레이어에게는 Atomic와 동일한 동작을 보입니다. 플레이어의 지속성을 되돌리려면 Model:RemovePersistentPlayer()를 사용하세요.

일시 정지 화면 사용자화

Workspace.StreamingIntegrityMode가 추천된 PauseOutsideLoadedArea로 설정되면, 플레이어가 스트리밍되지 않은 지역으로 이동하면 게임이 일시 정지합니다. 이러한 경우 Player.GameplayPaused 속성은 플레이어의 현재 일시 정지 상태를 나타내며, 이를 사용하여 GetPropertyChangedSignal() 연결을 통해 사용자 정의 GUI를 표시하거나 숨길 수 있습니다.

LocalScript

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)

런타임 디버깅

엔진에는 클라이언트에서 키보드 단축키를 사용하여 활성화할 수 있는 여러 화면 디버그 패널이 포함되어 있습니다. 스트리밍 디버그 정보를 액세스하려면:

  1. ShiftCtrlF3 (Windows) 또는 ShiftF3 (Mac)을 사용하여 네트워크 요약 디버그 오버레이를 엽니다.

  2. 디버그 오버레이가 열리면, Shift1을 반복해서 눌러서 사용 가능한 패널을 순환합니다. 네 번째 패널은 스트리밍 디버그 뷰로, 유용한 런타임 정보를 표시합니다:

    • 활성 스트리밍 설정
    • 현재 로드된 (스트리밍된) 지역
    • 스트리밍 동작 및 상태

활성이 되면 강조된 색상의 지역이 3D 뷰포트에 나타납니다:

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.