ContentProvider
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
İçeriği (varlıkları) bir oyuna yükleyen hizmet.
Roblox sunucuları, tüm varlıkları çalışma sırasında müşteriye akıştırır: İş Alanındaki nesneler, şemsiye malzemeleri, doku malzemeleri, vb. Mesh görüntü verileri, doku malzemeleri gibi varlıklar, Yayınlanıyor olarak gösterilir, bu da Yayınlanıyor modu aktifleştirilmiş olsa bile geçerlidir.
Bazı durumlarda, bu davranış istemedi, çünkü içerik deneyime yükleneceğinden önce bir gecikmeye neden olabilir.
ContentProvider ile, kaynakları ContentProvider:PreloadAsync() yöntemini kullanarak bir deneyime önce yükleyebilirsiniz. Görüntüleme ekranını göstermeyi, kritik kaynakları önce yüklemeyi ve sadece sonra oyuncuya deneyime izin vermeyi isteyebilirsiniz.
Önyükleme için En İyi Pratikler
- Sadece ön yükleme gereken kaynakları yükler, *değil ** * tüm çalışma alanını. Pop-in'leri görüntülemek için bazen gerekir, ancak yükleme sürelerini azaltır ve genellikle oyuncu deneyimini bozmaz. Ön yükleme için iyi adaylar arasında yükleme ekranı, UI veya başlangıç alanı gerekir.
- Oyuncular yükleme ekranını atlayın, veya belli bir süreden sonra otomatik olarak atlayın.
Kod Örnekleri
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.")
Özet
Özellikler
Roblox web sitesinden varlıkları indirmek için ContentProvider tarafından kullanılır.
İndirilmesi gereken ContentProvider isteğinin numarasını verir.
Yöntemler
Sunulan Enum.AssetFetchStatus ile sağlanan mevcut contentId alır.
Sunulan içerikteki Enum.AssetFetchStatus değerinde değiştiğinde ateş eden bir sinyal.
Verilen Instances ile ilgili tüm varlıklar yüklendiğinde kadar yüklenmez.
Etkinlikler
Özellikler
BaseUrl
Roblox web sitesinden varlıkları indirmek için ContentProvider tarafından kullanılır.
Bu, AppSettings.xml dosyasının bulunduğu versiyon kayıdı sunucusundaki bir Roblox web sitesine işaret eder ve AppSettings.xml dosyasından indirilir ve AppSettings.xml dosyasından çekilir.
Bu özelliği kaynak kutusu ile ContentProvider:SetBaseUrl() işlevini kullanarak üzerwrite etmek mümkündür; ancak, bu önerilmez ve varsayılan yüklenme sorunlarına neden olabilir.
RequestQueueSize
İndirilmesi gereken ContentProvider isteğinin numarasını verir.
Öğeler ilk kez bir varlık kullanıldığında veya ContentProvider:PreloadAsync() çağrıldığında müşteri sıraya eklenecek öğelerdir.
Yükleme çubukları oluşturmak için RequestQueueSize'yi kullanmak geliştiricilere tavsiye edilmez. Bu, çubuk boyutu her yeni varlık eklenip indirildiğinde hem art hem de az olabilir, çünkü sıra boyutu artık yükleme işlemi sırasında yüklenebilir ve indirilebilir. Geliştiriciler yükleme ilerlemesini gösteren yükleme grafikleri görmelidir (örnek aşağıda gösterildi).
Kod Örnekleri
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")
Yöntemler
GetAssetFetchStatus
Sunulan şu andaki Enum.AssetFetchStatus ile ilgili contentId ile sağlanır. GetAssetFetchStatusChangedSignal() kullanılarak bu değerin değişikliklerini dinlemek için kullanılır.
Parametreler
Durumu almak için içerikteki ID.
Dönüşler
İçeriklerin Enum.AssetFetchStatus 'i.
Kod Örnekleri
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
Sunulan içeriklerin Enum.AssetFetchStatus ı değiştirdiğinde çalışan bir sinyal. Bu sinyale bir çağrı kullanarak bağlanır. Bu, kullanıcının kıyafetlerini değiştirdiğinde otomatik olarak güncellenen varlıklar için özellikle yararlıdır.
Parametreler
Dönüşler
Kod Örnekleri
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
Dönüşler
UnregisterEncryptedAsset
Parametreler
Dönüşler
PreloadAsync
Verilen Instances ile ilgili tüm varlıklar yüklendiğinde kadar yapılır. Bu, bir kodu durdurup içeriği deneyim içinde yüklenmiş olup olmadığından emin olana kadar içerik kullanımını durdurabilir.
Çağrıldığında, motor, listedeki her öğenin içeriğine bağlantılar için gerekli olan içerikleri tespit eder. İçerikleri Instances veya bir Decal gibi, listede belirli
Bu yöntem ayrıca bir liste içerik ID yanıtlayabilir, ancak bu yanıtlayanlar görüntü varlıklarına uymalıdır. İçerik ID'lerini kullanarak görüntü olmayan varlıklar yüklenmeye çalışılırsa başarısız olur.
Yerleştirilen herhangi bir varlığın yüklenemediği durumda, çıktıda bir hata mesajı görünür. Yöntem kendi hata ayıklayacak ve her istenen istemci veya varlık kimliğini işlemlediğine kadar çalışmaya devam edecektir.
Parametreler
Görüntüler için bir dizi instans veya içerik ID'si (yüklenmesi gerekir).
Her bir varlık isteği tamamlandığında çağırılan işlev. content ileti ve varlığın son Enum.AssetFetchStatus .
Dönüşler
Kod Örnekleri
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))