Ai giocatori spesso piace contribuire a costruire lo spazio di gioco in cui si trovano. Il modulo sviluppatore SurfaceArt consente ai giocatori di lasciare letteralmente il segno all'interno di un'esperienza.
Utilizzo del modulo
Installazione
Per utilizzare il modulo SurfaceArt in un'esperienza:
Dalla scheda Visualizza, aprire il Pannello degli strumenti e selezionare la scheda Marketplace.
Assicurarsi che la selezione dei modelli sia selezionata, quindi fare clic sul pulsante Vedi tutto per le Categorie.
Individuare e fare clic sulla piastrella DEV MODULES.
Individuare il modulo Arte in superficie e fare clic su di esso, o trascinarlo e rilasciarlo nella visualizzazione 3D.
Nella finestra Explorer, spostare l'intero modello SurfaceArt in ServerScriptService. Dopo aver avviato l'esperienza, il modulo si distribuirà a vari servizi e inizierà a funzionare.
Posizionamento della tela
Il modulo viene fornito con un modello SurfaceCanvas che puoi posizionare nel mondo 3D. Questo modello è quello con cui i giocatori interagiranno al fine di posizionare le loro opere d'arte sulla sua superficie.
Individua la rete SurfaceCanvas all'interno della cartella Spazio di lavoro, nella cartella principale del modulo.
Spostarla nel livello alto della gerarchia dello Spazio di lavoro e posizionarla dove si desidera.
Dopo aver pubblicato/eseguito una sessione di test, i giocatori saranno in grado di interagire con l'oggetto tramite un ProximityPrompt e di posizionare l'arte sulla superficie prescelta.
Modificare l'aspetto della tela
Sotto il cappuccio, il modulo utilizza un SurfaceGui per visualizzare gli oggetti d'arte. Per configurare la superficie su cui appare l'arte:
Seleziona la maglia SurfaceCanvas.
Nella parte inferiore della finestra Proprietà, individuare l'attributo SurfaceCanvasFace con un valore predefinito di Destra.
Fai clic sull'attributo e inserisci uno dei sei valori che descrivono un Enum.NormalId.
Valore Attributo | ID normale corrispondente |
---|---|
Davanti | Enum.NormalId.Front |
Indietro | Enum.NormalId.Back |
Destra | Enum.NormalId.Right |
Sinistra | Enum.NormalId.Left |
Superiore | 귀여운Enum.NormalId.Top` |
**Inferiore | Enum.NormalId.bottom |
Utilizzo di risorse artistiche personalizzate
Per adattarsi meglio al tema della tua esperienza, puoi utilizzare il tuo set di risorse personalizzate invece dei valori predefiniti. Questo può essere fatto tramite la funzione di configurazione, chiamata da un Script in ServerScriptService.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local customAssets = {CustomAsset1 = {name = "Custom Asset 1",assetId = "rbxassetid://7322508294",},CustomAsset2 = {name = "Custom Asset 2",assetId = "rbxassetid://7322547665",},}SurfaceArt.configure({assets = customAssets,})
Cancellazione di tutte le tele
Per rimuovere tutte le opere artistiche esistenti da tutte le tele nel mondo, chiamare la funzione removeAllArt da un Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Visualizzazione degli effetti personalizzati
In alcuni casi potresti voler includere effetti visivi aggiuntivi quando un'opera d'arte viene posizionata. Questo modulo espone un evento denominato artChanged sul client a cui puoi connetterti e inserire la tua logica.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local function createParticleEmitter(canvas, position)
local attachment = Instance.new("Attachment")
attachment.Position = canvas.CFrame:PointToObjectSpace(position)
attachment.Axis = Vector3.new(0, 0, 1)
attachment.SecondaryAxis = Vector3.new(1, 0, 0)
attachment.Parent = canvas
local particleEmitter = Instance.new("ParticleEmitter")
particleEmitter.Speed = NumberRange.new(50)
particleEmitter.Rate = 50
particleEmitter.Color = ColorSequence.new(Color3.fromRGB(128, 254, 7))
particleEmitter.SpreadAngle = Vector2.new(35, 35)
particleEmitter.Parent = attachment
return attachment
end
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
if artId then
-- Show some sparkles for 3 seconds
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
Riferimento API
Tipi
SuperficieArtAsset
Immagini da visualizzare come arte per le tele, così come sono rappresentate da una tabella a due valori.
Chiave | Descrizione |
---|---|
nome | Nome visualizzato dei metadati. |
assetId | ID risorsa dell'immagine da includere. |
Funzioni
Configurare
configure(config:table):nil
Sovrascrive la configurazione predefinita attraverso le seguenti chiavi/valori nella configtabella. Questa funzione può essere chiamata solo da un Script.
Generale
Chiave | Descrizione | Predefinito |
---|---|---|
attivato | Imposta la funzionalità del modulo su on o su off. | vero |
risorse | Elenco dei SurfaceArtAssettipi. | (vedi codice) |
quotaPerPlayer | Numero massimo di opere d'arte che possono essere posizionate da ciascun giocatore | 2 |
Aspetto
Chiave | Descrizione | Predefinito |
---|---|---|
rowsPerCanvas | Numero di righe della griglia della tela. | 2 |
colsPerCanvas | Numero di colonne all'interno della griglia della tela. | 5 |
itemsPerPage | Numero di articoli da saltare quando si accede a sinistra e a destra. | 3 |
canvasPaddingLeft | Imbottitura sinistra per la tela superficiale (UDim). | (0, 8) |
canvasPaddingRight | Imbottitura destra per la tela superficiale (UDim). | (0, 8) |
canvasPaddingTop | Imbottitura superiore per la tela superficiale (UDim). | (0, 8) |
canvasPaddingBottom | Imbottitura inferiore per la tela superficiale (UDim). | (0, 8) |
promptImage | Icona visualizzata nel prompt di prossimità per entrare nella visualizzazione della selezione artistica. | "rbxassetid://8076723774" |
leftArrowPageImage | Immagine utile per andare alla pagina precedente con la freccia sinistra. | "rbxassetid://6998633654" |
leftArrow ItemImage | Immagine utile per selezionare l'oggetto artistico precedente con la freccia sinistra. | "rbxassetid://8072765021" |
rightArrowPageImage | Immagine utile per andare alla pagina successiva con la freccia destra. | "rbxassetid://6998635824" |
rightArrowItemImage | Immagine utile per andare selezionare l'oggetto artistico precedente con la freccia destra. | "rbxassetid://8072764852" |
Interazione
Chiave | Descrizione | Predefinito |
---|---|---|
promptKeyCode | Scorciatoia tastiera utilizzata per attivare il prompt al fine di inserire una selezione artistica (Enum.KeyCode). | E |
promptRequiresLineOfSight | Valore booleano che determina se il prompt di prossimità deve essere nella linea visiva tra l'utente e la tela. | vero |
promptMaxActivationDistance | Distanza massima cui il personaggio di un giocatore può trovarsi rispetto alla tela, affinché il prompt appaia. | 10 |
promptExclusivity | Enum.ProximityPromptExclusivityspecifica quali prompt possono essere visualizzati contemporaneamente. | OnePerButton |
usePageHotkeys | Se sono usati i tasti di scelta rapida della pagina. Se vero, nextPageKey e prevPageKey vengono utilizzati per navigare tra le pagine. | vero |
nextPageKey | Chiave utilizzata per navigare alla pagina d'arte successiva (Enum.KeyCode). | E |
nextItemKey | Chiave utilizzata per navigare verso il successivo oggetto artistico (Enum.KeyCode). | Destra |
prevPageKey | Chiave utilizzata per tornare alla precedente pagina di oggetti d'arte (Enum.KeyCode). | Q |
prevItemKey | Chiave utilizzata per navigare verso l'oggetto artistico precedente (Enum.KeyCode). | Sinistra |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
getCanvases
getCanvases():table
Restituisce tutte le tele contrassegnate con il tag SurfaceCanvas.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
placeArt
placeArt(player:Player, tela:BasePart):nil
Posiziona un'opera d'arte programmaticamente per conto di un giocatore. Si noti che l'canvasoggetto deve essere contrassegnato dal tag SurfaceCanvas quando il server viene inizializzato. Si consiglia di utilizzare questa funzione solo con una tela restituita da getCanvases.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Place the Bloxy Award from default art assets into the first canvas
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)
rimuoviTuttoArt
rimuoviTuttaL'Arte():nil
Rimuove tutte le opere d'arte da tutte le superfici.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Eventi
arteCambiato
arteCambiata(tela:BasePart, spot:Frame, spotPosizione:Vector3, artId:string, ownerUserId:number): RBXScriptSignal
Si accende quando un'opera d'arte viene modificata in una particolare posizione su una tela. Quando un'opera d'arte viene rimossa, artId sarà nil. Si noti che un Vector3 valore viene trasferito come terzo parametro al gestore dell'evento, in modo da poter posizionare un effetto personalizzato nella posizione esatta in cui l'opera d'arte è posizionata. Questo evento può essere collegato solo in un LocalScript.
Parametri | |
---|---|
tele: BasePart | Tela su cui è stata modificata l'opera d'arte. |
spot:Frame | Frame interno che contiene l'opera d'ImageLabelarte. |
spotPosizione: 귀여운Datatype.Vector3` | Posizione esatta in cui l'opera d'arte è stata posizionata. |
artId: string | ID risorsa della nuova opera d'arte. |
ownerUserId: number | UserId del giocatore che ha posizionato l'opera d'arte. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Art placed at:", spotPosition)
print("Art asset ID:", artId)
print("Art placed by:", ownerId)
end)
promptShown
promptShown(tela:BasePart): RBXScriptSignal
Si accende quando in prompt di interazione tra tele viene visualizzato da un giocatore. La funzione collegata riceve la tela su cui viene visualizzato il prompt. Questo evento può essere collegato solo in un LocalScript.
Parametri | |
---|---|
tele: BasePart | Tela su cui viene visualizzato il prompt. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.promptShown:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)
promptHidden
promptHidden(tela:BasePart): RBXScriptSignal
Si accende quando un prompt di interazione è nascosto. La funzione collegata riceve la tela su cui veniva visualizzato il prompt. Questo evento può essere collegato solo in un LocalScript.
Parametri | |
---|---|
tele: BasePart | Tela su cui veniva visualizzato il prompt. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.promptClosed:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)
selectorShown
selectorShown(): RBXScriptSignal
Si accende quando l'UI di selezione della superficie dell'opera d'arte viene visualizzata da un giocatore. Questo evento può essere collegato solo in un LocalScript.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "opened surface art selector")
end)
selettoreHidden
selettoreHidden(): RBXScriptSignal
Si accende quando l'UI di selezione della superficie di un'opera d'arte è nascosta per un giocatore. Questo evento può essere collegato solo in un LocalScript.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "closed surface art selector")
end)