Met de functie voor het creëren van in-game assets kun je je gebruikers toestaan om creaties die ze in je game hebben gemaakt op te slaan in hun inventarissen. Je gebruikers kunnen deze in-game creaties gebruiken zoals elke andere asset. Bovendien dragen deze creaties bij aan je game wanneer ze op het Roblox-platform worden weergegeven, zodat elke gebruiker de attributielink kan gebruiken om naar je game te komen en hun eigen creaties te maken.
Bijvoorbeeld, je kunt gebruikers in staat stellen om aangepaste wezens als huisdieren in je game te creëren en hen toestaan om hun favoriete huisdieren op te slaan in hun inventarissen. Je hebt volledige controle over welke objecten gebruikers kunnen aanpassen en opslaan vanuit je game. Gebruikers kunnen op hun beurt hun creaties op hun profielen weergeven met attributie naar jouw game, wat de zichtbaarheid van je game vergroot.
Ondersteunde assettypes en limieten
Net als alle assets op het platform, zijn in-game creaties onderhevig aan assetmoderatie. Momenteel kun je gebruikers toestaan om de volgende soorten in-game inhoud te creëren:
- Afbeeldingen (Enum.AssetType.Image) van een EditableImage die je game genereert of bewerkt tijdens runtime.
Wanneer je je game uitvoert of test en de opslaanactie mislukt, geeft Studio foutmeldingen weer in het Output-venster of de Developer Console.
In-game platforminhoudcreatie inschakelen
Om in-game creatie voor je gebruikers in te schakelen, gebruik je de AssetService:PromptCreatePlatformContentAsync() API-methode in een server-side script, samen met andere creatielogica. Geef aan welke objecten in je game je deze functionaliteit wilt inschakelen, stel een aangepaste trigger in (zoals een UI-pictogram) voor het aanroepen van de methode, en luister naar client remote events voor het opslaan van assets.
AssetService:PromptCreatePlatformContentAsync() neemt de volgende parameters:
- Een Player object dat de gebruiker vertegenwoordigt die een creatie indient.
- Een Object, zoals een EditableImage, dat de inhoud voor creatie vertegenwoordigt.
- Het Enum.AssetType, momenteel alleen Enum.AssetType.Image voor een afbeelding.
Wanneer de server AssetService:PromptCreatePlatformContentAsync() aanroept, verschijnt er een Indienen dialoogvenster op de client, zodat de gebruiker die de opslaanactie triggert een naam en beschrijving voor de asset kan invoeren. Roblox biedt de dialoog UI standaard aan, aangezien de opslaanworkflow een platformniveau-functionaliteit is.
Voordat je deze methode gebruikt, zorg ervoor dat:
- Het script dat AssetService:PromptCreatePlatformContentAsync() aanroept op de server draait.
- Je plaats is gepubliceerd. Het testen van de prompt in Studio op een niet-gepubliceerde plaats mislukt.
- Sta Mesh/Afbeelding API's toe is ingeschakeld voor je ervaring.
Maak een afbeelding van een EditableImage
Je kunt gebruikers ook toestaan om afbeeldingen te publiceren die je game genereert tijdens runtime met behulp van EditableImage. Het volgende voorbeeld van een server-side script tekent procedureel een eenvoudig logo in een EditableImage en vraagt elke speler om het als een afbeeldingsasset te publiceren wanneer ze de game betreden:
local AssetService = game:GetService("AssetService")
local Players = game:GetService("Players")
local BLUE = Color3.fromRGB(49, 86, 255)
local WHITE = Color3.new(1, 1, 1)
local SIZE = 400
local OUTER_SIZE = 200
local INNER_SIZE = 56
local ANGLE = 15 -- graden, met de klok mee
local function generateLogo()
-- Ongerotate logo: witte vierkant met een blauw vierkant in het midden.
local logo = AssetService:CreateEditableImage({
Size = Vector2.new(OUTER_SIZE, OUTER_SIZE),
})
-- Eindcanvas: solide blauw.
local canvas = AssetService:CreateEditableImage({
Size = Vector2.new(SIZE, SIZE),
})
if not logo or not canvas then
warn("Kon EditableImage niet maken. Zorg ervoor dat toegang tot de Editable Mesh / Image API's is ingeschakeld.")
return nil
end
logo:DrawRectangle(
Vector2.zero,
Vector2.new(OUTER_SIZE, OUTER_SIZE),
WHITE, 0, Enum.ImageCombineType.Overwrite
)
logo:DrawRectangle(
Vector2.new((OUTER_SIZE - INNER_SIZE) / 2, (OUTER_SIZE - INNER_SIZE) / 2),
Vector2.new(INNER_SIZE, INNER_SIZE),
BLUE, 0, Enum.ImageCombineType.Overwrite
)
canvas:DrawRectangle(
Vector2.zero,
Vector2.new(SIZE, SIZE),
BLUE, 0, Enum.ImageCombineType.Overwrite
)
-- Projecteer het logo op het canvas, geroteerd om zijn centrum.
canvas:DrawImageTransformed(
Vector2.new(SIZE / 2, SIZE / 2),
Vector2.one,
ANGLE,
logo,
{
CombineType = Enum.ImageCombineType.BlendSourceOver,
ResamplerMode = Enum.ResamplerMode.Default, -- gladde randen
}
)
logo:Destroy()
return canvas
end
Players.PlayerAdded:Connect(function(player)
-- CoreGui moet geladen zijn voor de Prompt-methode om te werken.
player.CharacterAdded:Wait()
local logo = generateLogo()
if not logo then
return
end
local complete, result, assetId = pcall(function()
return AssetService:PromptCreatePlatformContentAsync(player, logo, Enum.AssetType.Image)
end)
if complete then
if result == Enum.PromptCreateAssetResult.Success then
print("succesvol geüpload, AssetId:", assetId)
else
print("Ontvangen resultaat", result)
end
else
print("fout")
print(result)
end
end)In-Experience Creatie Demo Arena toont een voorbeeld van hoe je deze functie kunt gebruiken. Je kunt de demo joinen om door de in-game creatieworkflow als gebruiker te lopen, of de plaats in Studio bewerken om naar het ontwerp te verwijzen.
Post-creatie en attributie
Nadat gebruikers een asset hebben gemaakt en opgeslagen vanuit je game, kunnen ze deze vinden op de volgende plaatsen:
- Hun Mijn Inventaris pagina.
- Het Creaties tabblad van hun Profiel pagina.
- Het Ontwikkelingsitems tabblad onder hun Creator Dashboard Creaties pagina.
- Het Inventaris tabblad van hun Toolbox in Studio.
Wanneer gebruikers in-game creaties zien op de profielen of inventarissen van hun vrienden, zien ze attributie naar de oorspronkelijke game waarin de asset is gemaakt. Gebruikers kunnen op de attributielink klikken om naar de gamepagina te worden omgeleid, zodat ze de game kunnen joinen en hun eigen creaties kunnen maken.