콘텐츠(자산)를 게임에 로드하는 서비스.
Roblox 서버는 런타임에 모든 자산을 클라이언트에 스트림합니다: 작업 공간의 개체, 메쉬 자산, 텍스처 자산 등. 메쉬 시각적 데이터, 텍스처, 데칼, 음향 자산과 같은 자산는 스트림됩니다.
콘텐츠가 경험에 로드되기 전에 지연되는 경우 이 동작이 원하지 않는 경우가 있습니다.
ContentProvider를 사용하면 크기 조정 기능을 사용하여 경험에 자산을 미리 로드할 수 있습니다. 로딩 화면을 표시하고, 중요한 자산을 미리 로드하고, 플레이어가 경험에 액세스할 수 있도록 허용하는 것이 좋습니다.
미리 로드 모범 사례
- 작업 공간의 전체 프로워크를 미리 로드하지 마십시오, 아님. 에서 전체 워크스페이스. 가끔 팝업이 표시되지만, 이는 로드 시간을 줄이고 일반적으로 플레이어 경험을 방해하지 않습니다. 미리 로드할 작업 공간 자산을 포함하는 자산은 로딩 화면, UI 또는 시작 영역입니다.
- 플레이어가 로딩 화면을 건너뛰도록 하거나 특정 시간 후 자동으로 건너뛰도록 하십시오.
코드 샘플
local ContentProvider = game:GetService("ContentProvider")
local LOGO_ID = "rbxassetid://658743164"
local PAGE_TURN_ID = "rbxassetid://12222076"
local decal = Instance.new("Decal")
decal.Texture = LOGO_ID
local sound = Instance.new("Sound")
sound.SoundId = PAGE_TURN_ID
local assets = { decal, sound }
ContentProvider:PreloadAsync(assets)
print("All assets loaded.")
요약
속성
Roblox 웹사이트에서 자산을 다운로드하려면 사용하는 ContentProvider 에 의해.
다운로드해야 하는 ContentProvider 요청 큐의 항목 수를 지정합니다.
메서드
제공된 ContentId 의 현재 Enumerate.AssetFetchStatus 를 가져옵니다.
제공된 콘텐츠의 Enum.AssetFetchStatus 가 변경될 때 발생하는 신호입니다.
지정한 Instances와 관련된 모든 자산이 로드된 후에야 합니다.
이벤트
속성
BaseUrl
Roblox 웹사이트에서 자산을 다운로드하려면 사용하는 ContentProvider 에 의해.
이 URL은 AppSettings.xml 폴더에 있는 Roblox 호스팅 웹 사이트로 자산을 다운로드하고 앱 설정에서 제거하는 데 사용됩니다.
이 속성을 명령 바에서 ContentProvider:SetBaseUrl() 함수를 사용하여 덮어쓸 수 있지만 이 작업은 권장되지 않으며 자산 로드 문제를 일으킬 수 있습니다.
RequestQueueSize
다운로드해야 하는 ContentProvider 요청 큐의 항목 수를 지정합니다.
자산을 처음 사용하거나 ContentProvider:PreloadAsync()를 호출할 때 항목이 클라이언트의 요청 큐에 추가됩니다.
Loading 바를 생성하기 위해 RequestQueueSize를 사용하지 않도록 권장됩니다. 대기열 크기는 새로운 자산이 추가되고 다운로드되면 크기가 증가하거나 줄어듭니다. 새로운 자산을 표시하려는 개발자는 자산을 하나씩 로드해야 합니다(아래 예시 참조).
코드 샘플
local ContentProvider = game:GetService("ContentProvider")
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
local playerGui = localPlayer:WaitForChild("PlayerGui")
local screenGui = Instance.new("ScreenGui")
screenGui.Parent = playerGui
-- create a basic loading bar
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0.5, 0, 0.1, 0)
frame.Position = UDim2.new(0.5, 0, 0.5, 0)
frame.AnchorPoint = Vector2.new(0.5, 0.5)
frame.Parent = screenGui
local bar = Instance.new("Frame")
bar.Size = UDim2.new(0, 0, 1, 0)
bar.Position = UDim2.new(0, 0, 0, 0)
bar.BackgroundColor3 = Color3.new(0, 0, 1)
bar.Parent = frame
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://9120386436"
local sound2 = Instance.new("Sound")
sound2.SoundId = "rbxassetid://9120385974"
local assets = {
sound,
sound2,
}
task.wait(3)
for i = 1, #assets do
local asset = assets[i]
ContentProvider:PreloadAsync({ asset }) -- 1 at a time, yields
local progress = i / #assets
bar.Size = UDim2.new(progress, 0, 1, 0)
end
print("loading done")
메서드
GetAssetFetchStatus
제공된 현재 Enum.AssetFetchStatus ContentId 의 현재 contentId 을 가져옵니다. GetAssetFetchStatusChangedSignal() 을 사용하여 이 값에 대한 변경 내용을 수신하십시오.
매개 변수
통계를 검색하려는 콘텐츠의 ID입니다.
반환
코드 샘플
local ContentProvider = game:GetService("ContentProvider")
-- An example asset to load
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Output the current AssetFetchStatus of the asset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Listen for updates
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Trigger the asset to preload
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)
GetAssetFetchStatusChangedSignal
제공된 콘텐츠의 Enum.AssetFetchStatus가 변경되면 발생하는 신호입니다. 이 신호를 사용하여 한 형식의 반환 함수를 호출하여 연결하십시오. 이는 사용자가 옷을 변경할 때 썸네일처럼 자동으로 업데이트되는 자산에 특히 유용합니다.
매개 변수
반환
코드 샘플
local ContentProvider = game:GetService("ContentProvider")
-- An example asset to load
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Output the current AssetFetchStatus of the asset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Listen for updates
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Trigger the asset to preload
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)
UnregisterDefaultEncryptionKey
반환
UnregisterEncryptedAsset
매개 변수
반환
PreloadAsync
지정한 Instances 와 관련된 모든 자산이 로드된 경우까지 생성됩니다. 이를 사용하여 스크립트를 일시 중지하고 콘텐츠가 경험에 로드된 것이 확인된 후 콘텐츠를 사용하지 않습니다.
호출되면 엔진은 목록의 각 항목에 대해 콘텐츠에 대한 링크를 식별합니다. 속성이 콘텐츠에 대한 링크를 정의하는 Instances 의 경우, Class.Decal|Decal
이 메서드는 콘텐츠 ID 문자열 목록을 수신할 수도 있지만 이 문자열은 콘텐츠 자산에 대해 이미지 입니다. 콘텐츠 ID 문자열을 사용하여 이미지 자산을 로드하려는 경우 실패합니다.
자산 중 하나가 불러오다않으면 출력에 오류 메시지가 표시됩니다. 메서드 자체에 오류가 발생하지 않으며 요청된 각 인스턴스 또는 자산 ID가 처리될 때까지 계속 실행됩니다.
매개 변수
이미지를 불러오다인스턴스 또는 콘텐츠 ID 배열입니다.(이미지에 대한)
각 자산 요청이 완료될 때 호출됩니다. 문자열 content 및 자산의 최종 Enum.AssetFetchStatus를 반환합니다.
반환
코드 샘플
local ContentProvider = game:GetService("ContentProvider")
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://9120386436"
local decal = Instance.new("Decal")
decal.Texture = "rbxassetid://5447528495"
local assets = {
decal,
sound,
}
-- This will be hit as each asset resolves
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Preload the content and time it
local startTime = os.clock()
ContentProvider:PreloadAsync(assets, callback)
local deltaTime = os.clock() - startTime
print(("Preloading complete, took %.2f seconds"):format(deltaTime))