인스턴스 스트리밍

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

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

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

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

StreamingEnabled 속성이 활성화된 속성 창.

기술적 동작

범위

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

스트림 인

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

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

    원자, 지속적 또는 플레이어별 지속적로 설정된 Models; 모델 스트리밍 제어를 참조하십시오.

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

    위 인스턴스의 자손

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

스트림 아웃

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

BasePart 자손이 없는 Model은, 예를 들어 스크립트와 같은 비-BasePart 인스턴스의 "컨테이너"로만 사용되는 경우, 제외됩니다 제외되지 않는 한 BasePart의 자손이 됩니다.

조립체

물리적 조립체는 관련된 ConstraintsAttachments와 함께 완전한 단위로 스트리밍됩니다. 이는 클라이언트에서 일관된 물리 업데이트를 보장하는 데 도움이 됩니다. 유일한 예외는 조립체가 고정된 경우로, 이 경우 스트리밍 반경 내의 BaseParts만 해당 조립체와 함께 스트리밍됩니다.

조립체는 모든 BaseParts가 스트리밍 아웃될 수 있을 때까지 스트리밍 아웃되지 않습니다.

스트리밍 속성

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

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

추천
Improved를 사용하여 ModelsBasePart 자손에 대해 가장 효율적인 스트리밍을 활성화합니다.
PredictiveStreamingMode엔진 신호를 사용하여 플레이어가 곧 필요할 가능성이 있는 영역을 사전 스트리밍하는 예측 스트리밍에 옵트인합니다. 예를 들어, 재생성 위치나 플레이어가 최근에 떠난 지역이 포함됩니다. 예측은 추가적이며, 사용되지 않으면 짧은 시간 후에 만료되며, 자원이 제한된 클라이언트에서는 건너뜁니다.
StreamingIntegrityMode플레이어가 스트리밍되지 않은 세계의 지역으로 이동하면 게임이 의도하지 않은 방식으로 동작할 수 있습니다. 이 속성은 이러한 잠재적으로 문제를 일으킬 수 있는 상황을 피하는 방법을 제공합니다.

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

추천
엔진이 저사양 장치에 대해 게임을 최대한 축소할 수 있도록 기본값인 64를 사용합니다.
StreamingTargetRadius이 속성은 인스턴스가 스트리밍되는 최대 거리인 복제 초점에서의 거리를 제어합니다. 엔진은 메모리가 허용하는 한 이전에 로드된 인스턴스를 타겟 반경을 넘어 유지할 수 있습니다.

더 작은 StreamingTargetRadius는 서버의 작업 부하를 줄입니다. 서버는 설정된 값을 넘어 추가 인스턴스를 스트리밍하지 않기 때문입니다. 그러나 타겟 반경은 플레이어가 게임의 전체 세부 사항을 볼 수 있는 최대 거리이므로 이 두 가지 간의 균형을 잘 맞춰야 합니다.

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

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

복제 초점

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

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

서버 권한이 구현될 때 서버 권한과 함께 예측 및 재시뮬레이션을 포함한 클라이언트 측 물리 시뮬레이션은 스트리밍된 영역에서만 발생하며, 로컬로 생성된 인스턴스 및 Persistent 인스턴스에 대해서도 마찬가지입니다. 캐릭터에서 멀리 떨어져 있어도 계속 시뮬레이션하려는 인스턴스가 있는 경우 해당 인스턴스 근처에 추가 복제 초점을 생성하십시오.

예측 스트리밍

예측 스트리밍은 엔진 신호를 사용하여 플레이어의 움직임을 예상하고 플레이어가 곧 필요할 가능성이 있는 영역을 사전 스트리밍하는 옵트인 기능입니다. PredictiveStreamingModeEnabled로 설정하여 활성화하면 코드 변경 없이 스트리밍 일시 정지 및 시각적 팝인을 줄일 수 있습니다.

예측 스트리밍은 추가적입니다. 기존의 복제 초점 외에 작은 임시 스트리밍 초점을 생성하고, 소량의 추가 콘텐츠를 스트리밍하며, 게임 로직이나 스트리밍 계약을 변경하지 않습니다. 예측이 필요하지 않으면 예측된 영역은 짧은 시간 후에 만료되고 엔진은 콘텐츠를 언로드합니다. 엔진은 클라이언트 메모리와 성능도 고려하여 자원이 제한된 장치에서는 예측을 건너뜁니다.

PredictiveStreamingModeEnabled일 때 다음 예측 기능이 활성화됩니다:

기능설명
스폰 사전 가져오기플레이어가 죽으면 엔진은 가능한 스폰 위치에 작은 임시 스트리밍 초점을 생성하여 플레이어 캐릭터가 나타나기 전에 재생성 지역이 스트리밍되기 시작하여 재생성 직후의 일시 정지 및 누락된 콘텐츠를 줄입니다.
CFrame 반환 최적화플레이어가 지역에서 CFrames 떨어져 있을 때, 엔진은 그들이 떠난 위치에 작은 임시 스트리밍 초점을 생성합니다. 이는 플레이어가 건물, 하위 레벨, 상점 또는 허브 간에 이동할 때 자주 발생하는 시나리오에서 플레이어가 곧 돌아올 경우 해당 지역이 스트리밍되도록 유지하는 데 도움이 됩니다.

모델 스트리밍 제어

모델 단위로 스트리밍 문제를 피하고 WaitForChild()의 사용을 최소화하기 위해 Models 및 그 자손이 스트리밍되는 방식을 ModelStreamingMode 속성을 통해 사용자 정의할 수 있습니다.

비원자

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

레거시

Workspace.ModelStreamingBehaviorLegacy (기본값)로 설정되면 Model 컨테이너와 그 -BasePart 자손인 Scripts가 플레이어가 참여할 때 클라이언트에 복제됩니다. 그런 다음, 자격이 있을 때 모델의 BasePart 자손이 스트리밍됩니다.

개선됨

Workspace.ModelStreamingBehaviorImproved로 설정되면 모델 스트리밍 동작은 모델이 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'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.