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.
Bir oyuna içerik (varlıklar) yükleyen hizmet.
Roblox sunucuları, çalışma sırasında tüm varlıkları istemciye yayınlar: Çalışma Alanı'ndaki nesneler, dokuz meshesi, dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuz dokuzMesh görüntü verileri, dokular, çıkartmalar ve sesler gerekli olduğu gibi yayınlanır, Yayınlanma etkinleştirilmiş olsa bile.
Bazı durumlarda, bu davranış istenmez, çünkü içerik deneye yüklenmeden önce bir gecikmeye neden olabilir.
ContentProvider varlıkları ContentProvider:PreloadAsync() yöntemi kullanarak bir deneyime önceden yüklemenizi sağlar.Bir yükleme ekranı görüntülemek, kritik varlıkları önceden yükleme ve sadece oyuncuyu deneyime izin vermek isteyebilirsiniz.
Önyükleme için En İyi Uygulamalar
- Sadece önemli varlıkları önceden yükle, değil tüm Workspace .Zaman zaman pop-in alabilirsiniz, ancak yükleme sürelerini azaltır ve genellikle oyuncu deneyimini bozmaz.Önyükleme için iyi adaylar olan varlıklar, yükleme ekranı, UI veya başlangıç alanı için gerekli olanları içerir.
- Oyuncuların yükleme ekranını atlamasına izin verin veya belirli bir süre sonra otomatik olarak atlayın.
Kod Örnekleri
In this example a Decal and Sound are preloaded into a game. Once they have finished loading the script will print a message to the output.
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 istek sırasındaki öğe sayısını verir.
Yöntemler
Verilen Enum.AssetFetchStatus ın mevcut contentId sini alır.
Verilen içeriğin Enum.AssetFetchStatus değiştiğinde ateşlenen bir sinyal.
Verdiğiniz Instances ile ilişkili tüm varlıklar yüklendene kadar verir.
Etkinlikler
Özellikler
BaseUrl
Roblox web sitesinden varlıkları indirmek için ContentProvider tarafından kullanılır.
Bu URL, kaynakların indirildiği ve AppSettings.xml dosyasından çekildiği Roblox barındırılan bir web sitesine işaret eder ve sürüm-hash klasöründe bulunur.
Bu özellik komut çubuğundaki ContentProvider:SetBaseUrl() fonksiyonu kullanılarak üzerine yazılabilir; ancak, bu önerilmez ve varlık yükleme sorunlarına neden olabilir.
RequestQueueSize
İndirilmesi gereken ContentProvider istek sırasındaki öğe sayısını verir.
Eşyalar, bir varlık ilk kez kullanıldığında veya ContentProvider:PreloadAsync() çağrıldığında istemci isteği sırasına eklenir.
Geliştiricilere, yükleme çubukları oluşturmak için RequestQueueSize kullanmamaları tavsiye edilir.Bunun nedeni, yeni varlıklar eklenip indirildikçe sıra boyutunun zamanla artıp azalabilmesidir.Yükleme ilerlemesini görüntülemek isteyen geliştiriciler bir seferde bir kerede varlıkları yüklemelidir (aşağıdaki örneğe bakın).
Kod Örnekleri
This code sample demonstrates how ContentProvider:PreloadAsync() can be used to create a simple loading bar in a game, by loading the assets one at a time.
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
Verilen Enum.AssetFetchStatus ın mevcut contentId sini alır. Bu değere yapılan değişiklikleri dinlemek için GetAssetFetchStatusChangedSignal() kullanın.
Parametreler
Durumu almak için içeriğin ID'si.
Dönüşler
İçeriğin Enum.AssetFetchStatus 'si.
Kod Örnekleri
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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
Verilen içeriğin Enum.AssetFetchStatus değiştiğinde ateşlenen bir sinyal.Bu sinyale bir Enum.AssetFetchStatus tipinde bir argüman kullanarak geri çağrakla bağlanın.Bu, kullanıcılar kıyafetlerini değiştirdiğinde kendilerini otomatik olarak güncelleyebilecek varlıklar için özellikle yararlıdır. thumbnail of a user when they change clothes.
Parametreler
Dönüşler
Kod Örnekleri
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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)
RegisterEncryptedAsset
Parametreler
Dönüşler
RegisterSessionEncryptedAsset
Parametreler
Dönüşler
UnregisterDefaultEncryptionKey
Dönüşler
UnregisterEncryptedAsset
Parametreler
Dönüşler
PreloadAsync
Verdiğiniz Instances ile ilişkili tüm varlıklar yüklendene kadar verir.Bu, bir senaryoyu duraklatmak ve içeriğin deneyime yüklendiğinden emin olana kadar içeriği kullanmamak için kullanılabilir.
Çağrıldığında, motor listedeki her öğe için içeriğe bağlantıları tanımlar.İçeriğe bağlantıları tanımlayan özelliklere sahip herhangi bir Instances , Decal veya Sound gibi özelliklere sahip herhangi birinde, motor bu varlıkları Roblox'tan yüklemeye çalışır.Her talep edilen varlık için, çağrı işlevi çalışır ve varlığın son Enum.AssetFetchStatus 'ini gösterir.
Eğer varlıklardan herhangi biri yüklenemiyorsa, çıktıda bir hata mesajı görünür.Yöntemin kendisi hata yapmayacak ve talep edilen her bir durumişledene kadar devam edecek.
Sınırlar
ve desteklenmiyor çünkü bu nesneler, tek tek metinleri doğrudan yüklemeden işlenmiş doküman paketlerine bağımlıdır.Bir SurfaceAppearance örneğinde çağırmak hiçbir şey yapmayacak, ancak ilişkili dokular hala çalışma sırasında yayınlanacak.
Parametreler
Yüklenecek bir dizi instans.
Her bir varlık isteği tamamlandığında çağrılan işlev. content dize ve varlığın son Enum.AssetFetchStatus dönümünü döndürür.
Dönüşler
Kod Örnekleri
In this code sample, a sound and a texture are preloaded using Sound and Decal instances.
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))