Arte superficiale

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

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:

  1. Dalla scheda Visualizza, apri la Toolbox e seleziona la scheda Creator Store .

    Toolbox toggle button in Studio
  2. Assicurati che la classificazione Modelli sia selezionata, quindi fai clic sul pulsante Vedi tutti per Categorie .

  3. Individua e fai clic sul riquadro Moduli di sviluppo .

  4. Individua il modulo Arte della superficie e cliccalo, oppure trascinalo nella vista 3D.

  5. 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.

  1. Individua la mesh SurfaceCanvas all'interno della cartella Workspace del modulo principale.

  2. Spostalo nella gerarchia di livello superiore Workspace e posizionalo dove desiderato.

  3. 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:

  1. Seleziona la Mesh, maglia SurfaceCanvas .

  2. Nella parte inferiore della finestra Proprietà , individua l'attributo SurfaceCanvasFace con un valore predefinito di Destra .

  3. Fai clic sull'attributo e inserisci uno dei sei valori che descrivono un Enum.NormalId .

Valore attributoID 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.

ChiaveDescrizione
nameNome di visualizzazione metadata.
assetIdID 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 .

ChiaveDescrizioneBasilare
enabledAttiva o disattiva la funzionalità del modulo on o Off.vero
assetsElenco di tipi di SurfaceArtAsset .(vedi codice qui sotto)
quotaPerPlayerNumero 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

placeArt(Giocatore: Player , canvas: BasePart )

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: BasePartTela su cui è stata modificata l'opera d'arte.
spot: FrameInterno Frame che contiene l'opera d'arte ImageLabel .
posizione spot: Vector3Posizione esatta in cui è stato posizionato l'arte.
artId: stringID risorsa della nuova opera d'arte.
uuid del proprietario: numberUserId 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: BasePartTela 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: BasePartTela 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)