Arte superficiale

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

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:

  1. Dalla Visualizza scheda, 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 tutto per Categorie.

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

  4. Individua il modulo Arte superficiale e fai clic su di esso, o trascinalo nella vista 3D.

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

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

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

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

  1. Seleziona il SurfaceCanvas Mesh, maglia.

  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 dell'attributoID 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.

ChiaveDescrizione
nameNome Visualizzatodei metadati.
assetIdID risorsa dell'immagine da includere.

Funzioni

configurare

Configurare(config: Library.table)

Sovrascrivi le opzioni di configurazione predefinite attraverso le seguenti chiavi / valori nella tabella config. Questa funzione può essere chiamata solo da un Script .

ChiaveDescrizionePredefinito
enabledAttiva o disattiva la funzionalità del modulo.vero
assetsLista di SurfaceArtAsset tipi.(vedi codice sotto)
quotaPerPlayerNumero 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

getCanvases() table

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

placeArt(Giocatore: Player , canvas: BasePart )

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

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: BasePartTela su cui l'arte è stata cambiata.
spawn: FrameInterno Frame che contiene l'arte ImageLabel .
PosizioneSpot: Vector3Posizione esatta in cui l'arte è stata posizionata.
artId: stringID risorsa della nuova arte.
OwnerUUID: 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 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: BasePartTela 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: BasePartTela 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)