I giocatori spesso godono di sentirsi come se fossero una parte della costruzione dello spazio in cui si trovano. Il SurfaceArt modulo sviluppatore lascia i giocatori letteralmente lasciare il loro marchio in un'esperienza.
Uso del modulo
Installazione
Per utilizzare il modulo SurfaceArt in un'esperienza:
Dalla Visualizza scheda, apri la Toolbox e seleziona la scheda Creator Store .
Assicurati che la classificazione Modelli sia selezionata, quindi fai clic sul pulsante Vedi tutto per Categorie.
Individua e fai clic sul riquadro Moduli di Piastrella.
Individua il modulo Arte superficiale e fai clic su di esso, o trascinalo nella vista 3D.
Nella finestra Explorer, spostare l'intero modello di superficie in ServerScriptService . Al momento dell'esecuzione dell'esperienza, il modulo si distribuirà su varie servizi e inizierà a funzionare.
Posizionamento della tela
Il modulo viene fornito con un modello SurfaceCanvas che puoi posizionare nel Mondo3D. Questo modello è ciò che i giocatori interagiscono per posizionare l'arte sulla sua superficie.
Individua il SurfaceCanvas mesh all'interno della cartella Workspace della cartella principale del modulo.
Spostalo nella gerarchia di livello superiore Workspace e posizionalo dove desiderato.
Al pubblicare/eseguire una Sessionedi test, i giocatori saranno in grado di interagire con l'oggetto tramite un ProximityPrompt e posizionare l'arte sulla superficie definita.
Cambiare la faccia della canvas
Sotto il cappuccio, il modulo usa un SurfaceGui per mostrare gli oggetti d'arte. Per configurare su quale superficie appare l'arte:
Seleziona il SurfaceCanvas Mesh, maglia.
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 dell'attributo | ID corrispondente della normale |
---|---|
Fronte | Enum.NormalId.Front |
Torna indietro | Enum.NormalId.Back |
Destra | Enum.NormalId.Right |
Sinistra | Enum.NormalId.Left |
Top | Enum.NormalId.Top |
In basso | Enum.NormalId.Bottom |
Utilizzare le risorse di arte personalizzata
Per adattare meglio il tema della tua esperienza, puoi utilizzare le tue risorse personalizzate invece che le impostazioni predefinite. Questo può essere fatto tramite la funzione configura, 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,})
Svuotare tutti i canevasi
Per rimuovere tutte le opere esistenti da tutti i canevas nel Mondo, chiama la funzione RemoveAllArt da un Script .
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Mostra effetti personalizzati
Ci possono essere casi in cui ti piacerebbe includere ulteriori effetti visivi quando un'opera d'arte viene posizionata. Questo modulo esegue 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 alcuni brilli per 3 secondi
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
Riferimento API
Tipi
SurfaceArtAsset
Le immagini da utilizzare come arte per la tela sono rappresentate da un tavolo con due valori.
Chiave | Descrizione |
---|---|
name | Nome Visualizzatodei metadati. |
assetId | ID risorsa dell'immagine da includere. |
Funzioni
configurare
Sovrascrivi le opzioni di configurazione predefinite attraverso le seguenti chiavi / valori nella tabella config. Questa funzione può essere chiamata solo da un Script .
Chiave | Descrizione | Predefinito |
---|---|---|
enabled | Attiva o disattiva la funzionalità del modulo. | vero |
assets | Lista di SurfaceArtAsset tipi. | (vedi codice sotto) |
quotaPerPlayer | Numero massimo di pezzi d'arte che ciascun Giocatorepuò posizionare. | 2 |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
getCanvases
Restituisce tutti i canevas contrassegnati con il tag SurfaceCanvas .
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
luogoArte
Posiziona un'opera d'arte programmaticamente in nome di un Giocatore. Nota che l'oggetto canvas deve essere contrassegnato con il tag SurfaceCanvas quando il server viene inizializzato. È consigliato utilizzarlo solo con un'opera d'arte 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)
-- Posiziona il Bloxy Award dalle risorse d'arte predefinite nella prima tela
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)
rimuovi tutto l'arte
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
arteModificata
Fa fuoco quando un'opera d'arte viene cambiata in una posizione particolare su un' canvas. Quando un'opera d'arte viene rimossa, artId sarà nil . Nota che un valore Vector3 viene passato come terzo parametro all'evento handler in modo che
Parametri | |
---|---|
canvas: BasePart | Tela su cui l'arte è stata cambiata. |
spawn: Frame | Interno Frame che contiene l'arte ImageLabel . |
PosizioneSpot: Vector3 | Posizione esatta in cui l'arte è stata posizionata. |
artId: string | ID risorsa della nuova arte. |
OwnerUUID: 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 attiva quando viene mostrata una richiesta di interazione a un Giocatore. La funzione connessa riceve la tela su cui viene mostrata la richiesta. Questo evento può essere connesso solo in un LocalScript .
Parametri | |
---|---|
canvas: BasePart | Tela su cui viene visualizzata la richiesta. |
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)
promptNascondi
Si attiva quando viene nascosta la richiesta di interazione a canvas. La funzione connessa riceve la canvas su cui il richiamo era mostrato. Questo evento può essere connesso solo in un LocalScript .
Parametri | |
---|---|
canvas: BasePart | Tela su cui si mostrava l'invito. |
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)
selectorMostra
Si attiva quando viene mostrata l'interfaccia utente di selezione della superficie all'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)
selectorNascondi
Si attiva quando la selezione 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)