Arte da 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 muitas vezes gostam de se sentir como fazem parte da construção do espaço em que estão.O módulo de desenvolvedor Arte da Superfície deixa os jogadores literalmente deixar sua marca em uma experiência.

Uso do Módulo

Instalação

Para usar o módulo Arte da Superfície em uma experiência:

  1. Da aba Ver, abra a Caixa de Ferramentas e selecione a aba Loja do Criador .

    Toolbox toggle button in Studio
  2. Certifique-se de que a classificação Modelos está selecionada, então clique no botão Ver Todos para Categorias .

  3. Localize e clique no tijolo Dev Modules .

  4. Localize o módulo Arte da Superfície e clique nele, ou arraste-o para a ver3D.

  5. Na janela Explorer, mova todo o modelo Arte da Superfície para Serviço de Script de Servidor .Ao executar a experiência, o módulo se distribuirá a vários serviços e começará a funcionar.

Posicionando o Canvas

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

  1. Localize a Grade de Superfície mesh dentro da pasta Espaço de Trabalho da pasta principal do módulo.

  2. Mova-o para a hierarquia de nível superior Espaço de Trabalho e posicione-o onde desejado.

  3. Após publicar/executar uma sessão de teste, os jogadores poderão interagir com o objeto através de um ProximityPrompt e colocar arte na superfície definida.

Mudando o Rosto do Canvas

Debaixo do capô, o módulo usa um SurfaceGui para exibir itens de arte. Para configurar em qual superfície o arte aparece:

  1. Selecione a malhado Canvas de Superfície .

  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 de atributoID Normal Correspondente
Frente Enum.NormalId.Front
Voltar Enum.NormalId.Back
Direita Enum.NormalId.Right
Esquerda Enum.NormalId.Left
Primeiro Enum.NormalId.Top
Inferior Enum.NormalId.Bottom

Usando recursos de arte personalizados

Para se encaixar melhor no tema da sua experiência, você pode usar seu próprio conjunto de recursos personalizados em vez dos padrões.Isso pode ser feito através da função configurar, chamada a partir de um Script em Serviço de Script de Servidor .

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,
})

Limpar todos os canvases

Para remover toda a arte existente de todos os canvases no mundo, chame a função removeAllArt de um .

Script

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

Mostrando Efeitos Personalizados

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

LocalScript

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
-- 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 o canvas são representadas por uma tabela com dois valores.

ChaveDescrição
nameNome de exibição de metadados.
assetIdID de recurso da imagem a incluir.

Funções

configurar

configurar(config: table )

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

ChaveDescriçãoPadrão
enabledAlterna a funcionalidade do módulo em ou desligado.verdadeiro
assetsLista de tipos de Arte da Superfície .(veja código abaixo)
quotaPerPlayerNúmero máximo de peças de arte que cada jogador pode colocar.2
Script

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

obterCanvases

getCanvases(): table

Retorna todos os canvases marcados com a tag SurfaceCanvas .

Script

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

localArt

placeArt(jogador: Player , canvas: BasePart )

Coloca uma peça de arte programaticamente em nome de um jogador.Observe que o objeto canvas deve ser marcado com a tag SurfaceCanvas quando o servidor for inicializado.Recomenda-se usar isso apenas com um canvas retornado de obterCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Coloque o Prêmio Bloxy de recursos de arte padrão para o primeiro canvas
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:WaitForChild("SurfaceArt"))
SurfaceArt.removeAllArt()

Eventos

arteAlterada

Dispara quando uma obra de arte é alterada em um local específico em uma tela.Quando uma obra de arte for 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 em que a arte é colocada.Este evento só pode ser conectado em um LocalScript .

Parâmetros
canvas: BasePartTela sobre a qual a arte foi alterada.
local: FrameInterno Frame que contém a arte ImageLabel .
posição de destino: Vector3Posição exata em que a arte foi colocada.
artId: stringID de recurso da nova arte.
uuid do proprietário: numberUserId do jogador que colocou a arte.
LocalScript

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)

promptMostrado

Dispara quando um prompt de interação de tela é mostrado a um jogador.A função conectada recebe o canvas em que o prompt está sendo mostrado.Este evento só pode ser conectado em um LocalScript .

Parâmetros
canvas: BasePartTela sobre a qual o aviso está sendo mostrado.
LocalScript

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)

hiddenAprimorado

Dispara quando um prompt de interação de tela é ocultado.A função conectada recebe o canvas em que o prompt estava mostrando.Este evento só pode ser conectado em um LocalScript .

Parâmetros
canvas: BasePartTela sobre a qual o aviso estava sendo mostrado.
LocalScript

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)

selectorMostrado

Incêndios quando a interface de seleção de arte da superfície é mostrada 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:WaitForChild("SurfaceArt"))
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "opened surface art selector")
end)

seletorEscondido

Incêndios quando a interface de seleção de arte da superfície é oculta 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:WaitForChild("SurfaceArt"))
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "closed surface art selector")
end)