I giocatori spesso si sentono come se fossero una parte della costruzione dello spazio in cui sono.Il modulo SurfaceArt dello sviluppatore fa in modo che i giocatori lascino letteralmente il segno in un'esperienza.
Uso del modulo
Installazione
Per utilizzare il modulo SurfaceArt in un'esperienza:
Assicurati che la classificazione Modelli sia selezionata, quindi fai clic sul pulsante Vedi tutti per Categorie .
Individua e fai clic sul riquadro Moduli di sviluppo .
Individua il modulo Arte della superficie e cliccalo, oppure trascinalo nella vista 3D.
Nella finestra Explorer, sposta l'intero modello SurfaceArt nel ServerScriptService .Dopo l'esecuzione dell'esperienza, il modulo si distribuirà a vari servizi e inizierà a funzionare.
Posizionamento della canvas
Il modulo viene fornito con un modello SurfaceCanvas che puoi posizionare nel Mondo3D.Questo modello è ciò con cui i giocatori interagiranno per posizionare l'arte sulla sua superficie.
Individua la mesh SurfaceCanvas all'interno della cartella Workspace del modulo principale.
Spostalo nella gerarchia di livello superiore Workspace e posizionalo dove desiderato.
Dopo la pubblicazione/esecuzione di una Sessionedi test, i giocatori saranno in grado di interagire con l'oggetto attraverso un ProximityPrompt e posizionare l'arte sulla superficie definita.
Cambiare la faccia della tela
Sotto il cappuccio, il modulo utilizza un SurfaceGui per visualizzare gli oggetti d'arte. Per configurare su quale superficie appare l'arte:
Seleziona la Mesh, maglia SurfaceCanvas .
Nella parte inferiore della finestra Proprietà , individua 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 |
In basso | 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 degli standard.Questo può essere fatto attraverso la funzione configura, chiamata da un Script in ServerScriptService .
Scrittura
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,})
Cancellare tutti i canvas
Per rimuovere tutta l'arte esistente da tutti i canvas nel Mondo, chiama la funzione removeAllArt da un Script .
Scrittura
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Mostra effetti personalizzati
Possono esserci casi in cui vorresti includere effetti visivi aggiuntivi quando un'opera d'arte viene posizionata.Questo modulo esporre un evento chiamato artChanged sul client che puoi connettere e aggiungere la tua logica.
Script locale
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
-- Mostra alcune scintille per 3 secondi
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
Riferimento API
Tipi
Risorsa SurfaceArt
Le immagini da utilizzare come arte per la tela sono rappresentate da una tabella con due valori.
Chiave | Descrizione |
---|---|
name | Nome di visualizzazione metadata. |
assetId | ID risorsa dell'immagine da includere. |
Functioni
configurare
configurare(config: table )
Sovrascrive le opzioni di configurazione predefinite attraverso le seguenti chiavi/valori nella tabella config.Questa funzione può essere chiamata solo da un Script .
Chiave | Descrizione | Basilare |
---|---|---|
enabled | Attiva o disattiva la funzionalità del modulo on o Off. | vero |
assets | Elenco di tipi di SurfaceArtAsset . | (vedi codice qui sotto) |
quotaPerPlayer | Numero massimo di pezzi d'arte che ogni Giocatorepuò posizionare. | 2 |
Scrittura
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
ottenereCanvases
getCanvases(): table
Restituisce tutti i canvas contrassegnati con il tag SurfaceCanvas.
Scrittura
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
placeArt
Posiziona un pezzo d'arte programmaticamente a nome di un Giocatore.Nota che l'oggetto canvas deve essere contrassegnato con il tag SurfaceCanvas quando il server viene inizializzato.Si consiglia di utilizzare questo solo con un canvas restituito da getCanvases .
Scrittura
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Posiziona il premio Bloxy delle risorse artistiche predefinite nella prima tela
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)
rimuoviTuttoArt
rimuoviAllArt()
Rimuove tutte le opere d'arte da tutte le superfici.
Scrittura
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Eventi
arteCambiata
Si accende quando un'opera d'arte viene modificata in un particolare luogo su una tela.Quando un'opera viene rimossa, artId sarà nil .Nota che un valore Vector3 viene passato come terzo parametro al gestore eventi in modo che tu possa posizionare un effetto personalizzato nell'esatta posizione in cui viene posizionata l'opera d'arte.Questo evento può essere connesso solo in un LocalScript .
Parametri | |
---|---|
canvas: BasePart | Tela su cui è stata modificata l'opera d'arte. |
spot: Frame | Interno Frame che contiene l'opera d'arte ImageLabel . |
posizione spot: Vector3 | Posizione esatta in cui è stato posizionato l'arte. |
artId: string | ID risorsa della nuova opera d'arte. |
uuid del proprietario: number | UserId del giocatore che ha posizionato l'arte. |
Script locale
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)
promptMostrato
Si accende quando un prompt di interazione della tela viene mostrato a un Giocatore.La funzione connessa riceve il canvas su cui viene mostrato l'invio.Questo evento può essere connesso solo in un LocalScript .
Parametri | |
---|---|
canvas: BasePart | Tela su cui viene mostrato l'invio. |
Script locale
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)
richiestaHidden
Si accende quando un prompt di interazione della tela viene nascosto.La funzione connessa riceve il canvas su cui l'istanza era mostrata.Questo evento può essere connesso solo in un LocalScript .
Parametri | |
---|---|
canvas: BasePart | Tela su cui l'invito era in mostra. |
Script locale
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)
selezionatoreShown
Si accende quando l'interfaccia utente selezionatrice dell'arte della superficie viene mostrata a un Giocatore. Questo evento può essere connesso solo in un LocalScript .
Script locale
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)
selezionatoreHidden
Si accende quando l'interfaccia utente selezionatrice dell'arte della superficie è nascosta per un Giocatore. Questo evento può essere connesso solo in un LocalScript .
Script locale
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)