Arte de Superfície

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Os jogadores geralmente gostam de sentir que fazem parte da construção do espaço em que estão. O módulo SurfaceArt módulo do desenvolvedor permite que os jogadores deixem literalmente sua marca em uma experiência.

Uso do Módulo

Instalação

Para usar o módulo SurfaceArt em uma experiência:

  1. No menu Janela do Studio ou na barra de ferramentas da aba Início, abra a Caixa de Ferramentas e selecione a aba Loja do Criador.

  2. Certifique-se de que a ordenação Modelos esteja selecionada, e clique no botão Ver Todos para Categorias.

  3. Localize e clique no bloco Pacotes.

  4. Localize o módulo Arte de Superfície e clique nele, ou arraste-e-solte-o na vista 3D.

  5. Na janela Explorador, mova todo o modelo SurfaceArt para ReplicatedStorage. Ao executar a experiência, o módulo começará a rodar.

Posicionando a Tela

O módulo vem com um modelo SurfaceCanvas que você pode posicionar no mundo 3D. Esse modelo é o que os jogadores interagirão para colocar arte em sua superfície.

  1. Localize a malha SurfaceCanvas dentro da pasta Workspace da pasta principal do módulo.

  2. Mova-o para a hierarquia de Workspace de nível superior e posicione-o onde desejar.

  3. Ao publicar/realizar uma sessão de teste, os jogadores poderão interagir com o objeto por meio de um ProximityPrompt e colocar arte na superfície definida.

Mudando a Face da Tela

Por trás dos panos, o módulo usa um SurfaceGui para exibir itens de arte. Para configurar em qual superfície a arte aparecerá:

  1. Selecione a malha SurfaceCanvas.

  2. Na parte inferior da janela Propriedades, localize o atributo SurfaceCanvasFace com um valor padrão de Direita.

  3. Clique no atributo e insira um dos seis valores que descrevem um Enum.NormalId.

Valor do AtributoID Normal Correspondente
FrenteEnum.NormalId.Front
CostasEnum.NormalId.Back
DireitaEnum.NormalId.Right
EsquerdaEnum.NormalId.Left
CimaEnum.NormalId.Top
BaixoEnum.NormalId.Bottom

Usando Ativos de Arte Personalizados

Para se adequar melhor ao tema da sua experiência, você pode usar seu próprio conjunto de ativos personalizados em vez dos padrões. Isso pode ser feito através da função configurar, chamada de um Script em ServerScriptService.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local customAssets = {
CustomAsset1 = {
name = "Ativo Personalizado 1",
assetId = "rbxassetid://7322508294",
},
CustomAsset2 = {
name = "Ativo Personalizado 2",
assetId = "rbxassetid://7322547665",
},
}
SurfaceArt.configure({
assets = customAssets,
})

Limpando Todas as Telas

Para remover toda a arte existente de todas as telas no mundo, chame a função removeAllArt de um Script.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

Mostrando Efeitos Personalizados

Pode haver casos em que você deseja incluir efeitos visuais adicionais quando uma obra de arte é colocada. Este módulo expõe um evento chamado artChanged no cliente que você pode conectar e adicionar sua própria lógica.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.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
-- Mostre alguns brilhos por 3 segundos
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Referência da API

Tipos

SurfaceArtAsset

Imagens a serem usadas como arte para a tela são representadas por uma tabela com dois valores.

ChaveDescrição
nameNome de exibição da metadata.
assetIdID do ativo da imagem a ser incluída.

Funções

configure

configure(config: table)

Substitui opções de configuração padrão através das seguintes chaves/valores na tabela config. Esta função só pode ser chamada de um Script.

ChaveDescriçãoPadrão
enabledAtiva ou desativa a funcionalidade do módulo.true
assetsLista de tipos SurfaceArtAsset.(veja o código abaixo)
quotaPerPlayerNúmero máximo de peças de arte que podem ser colocadas por cada jogador.2
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.configure({
quotaPerPlayer = 4,
promptKeyCode = Enum.KeyCode.T,
promptMaxActivationDistance = 8,
})

getCanvases

getCanvases(): table

Retorna todas as telas marcadas com a tag SurfaceCanvas.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local canvases = SurfaceArt.getCanvases()

placeArt

placeArt(player: Player, canvas: BasePart)

Coloca uma peça de arte programaticamente em nome de um jogador. Observe que o objeto canvas deve estar marcado com a tag SurfaceCanvas quando o servidor for inicializado. É recomendado usar isso apenas com uma tela retornada de getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Coloque o Prêmio Bloxy dos ativos de arte padrão na primeira tela
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

Remove toda a arte de todas as superfícies.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

Eventos

artChanged

Dispara quando uma obra de arte é alterada em um determinado local em uma tela. Quando uma obra de arte é removida, artId será nil. Observe que um valor Vector3 é passado como o terceiro parâmetro para o manipulador de eventos, para que você possa posicionar um efeito personalizado na posição exata onde a obra de arte é colocada. Este evento só pode ser conectado em um LocalScript.

Parâmetros
canvas: BasePartTela na qual a obra de arte foi alterada.
spot: FrameFrame interno Frame que contém a ImageLabel da obra de arte.
spotPosition: Vector3Posição exata onde a obra de arte foi colocada.
artId: stringID de ativo da nova obra de arte.
ownerUserId: numberID de Usuário de UserId do jogador que colocou a arte.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Arte colocada em:", spotPosition)
print("ID do ativo da arte:", artId)
print("Arte colocada por:", ownerId)
end)

promptShown

Dispara quando um aviso de interação com a tela é exibido a um jogador. A função conectada recebe a tela na qual o aviso está sendo exibido. Este evento só pode ser conectado em um LocalScript.

Parâmetros
canvas: BasePartTela na qual o aviso está sendo exibido.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.promptShown:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)

promptHidden

Dispara quando um aviso de interação com a tela é ocultado. A função conectada recebe a tela na qual o aviso estava sendo exibido. Este evento só pode ser conectado em um LocalScript.

Parâmetros
canvas: BasePartTela na qual o aviso estava sendo exibido.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.promptClosed:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)

selectorShown

Dispara quando a interface do seletor de arte de superfície é exibida a um jogador. Este evento só pode ser conectado em um LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "abriu o seletor de arte de superfície")
end)

selectorHidden

Dispara quando a interface do seletor de arte de superfície é ocultada para um jogador. Este evento só pode ser conectado em um LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "fechou o seletor de arte de superfície")
end)
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.