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:
Certifique-se de que a classificação Modelos está selecionada, então clique no botão Ver Todos para Categorias .
Localize e clique no tijolo Dev Modules .
Localize o módulo Arte da Superfície e clique nele, ou arraste-o para a ver3D.
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.
Localize a Grade de Superfície mesh dentro da pasta Espaço de Trabalho da pasta principal do módulo.
Mova-o para a hierarquia de nível superior Espaço de Trabalho e posicione-o onde desejado.
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:
Selecione a malhado Canvas de Superfície .
Na parte inferior da janela Propriedades , localize o atributo SurfaceCanvasFace com um valor padrão de Direita .
Clique no atributo e insira um dos seis valores que descrevem um Enum.NormalId.
Valor de atributo | ID 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.
Chave | Descrição |
---|---|
name | Nome de exibição de metadados. |
assetId | ID 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 .
Chave | Descrição | Padrão |
---|---|---|
enabled | Alterna a funcionalidade do módulo em ou desligado. | verdadeiro |
assets | Lista de tipos de Arte da Superfície . | (veja código abaixo) |
quotaPerPlayer | Nú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
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: BasePart | Tela sobre a qual a arte foi alterada. |
local: Frame | Interno Frame que contém a arte ImageLabel . |
posição de destino: Vector3 | Posição exata em que a arte foi colocada. |
artId: string | ID de recurso da nova arte. |
uuid do proprietário: number | UserId 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: BasePart | Tela 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: BasePart | Tela 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)