Arte de Superficie

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Los jugadores a menudo disfrutan sentirse parte de la construcción del espacio en el que se encuentran. El módulo SurfaceArt developer module permite a los jugadores dejar literalmente su huella en una experiencia.

Uso del Módulo

Instalación

Para usar el módulo SurfaceArt en una experiencia:

  1. Desde el menú Ventana de Studio o la barra de herramientas de la pestaña Inicio, abre el Toolbox y selecciona la pestaña Creator Store.

  2. Asegúrate de que la clasificación Modelos esté seleccionada, luego haz clic en el botón Ver Todo para Categorías.

  3. Localiza y haz clic en el mosaico Paquetes.

  4. Localiza el módulo Arte de Superficie y haz clic en él, o arrástralo y suéltalo en la vista 3D.

  5. En la ventana Explorer, mueve todo el modelo SurfaceArt a ReplicatedStorage. Al ejecutar la experiencia, el módulo comenzará a funcionar.

Posicionando el Lienzo

El módulo viene con un modelo SurfaceCanvas que puedes posicionar en el mundo 3D. Este modelo es con el que los jugadores interactuarán para colocar arte en su superficie.

  1. Localiza la malla SurfaceCanvas dentro de la carpeta Workspace de la carpeta principal del módulo.

  2. Mueve el modelo a la jerarquía de Workspace de nivel superior y colócalo donde desees.

  3. Al publicar/ejecutar una sesión de prueba, los jugadores podrán interactuar con el objeto a través de un ProximityPrompt y colocar arte en la superficie definida.

Cambio de la Cara del Lienzo

Bajo el capó, el módulo utiliza un SurfaceGui para mostrar elementos de arte. Para configurar sobre qué superficie aparece el arte:

  1. Selecciona la malla SurfaceCanvas.

  2. En la parte inferior de la ventana Propiedades, localiza el atributo SurfaceCanvasFace con un valor predeterminado de Derecha.

  3. Haz clic en el atributo e ingresa uno de los seis valores que describen un Enum.NormalId.

Valor del AtributoID Normal Correspondiente
FrenteEnum.NormalId.Front
AtrásEnum.NormalId.Back
DerechaEnum.NormalId.Right
IzquierdaEnum.NormalId.Left
ArribaEnum.NormalId.Top
AbajoEnum.NormalId.Bottom

Uso de Activos de Arte Personalizados

Para adaptarse mejor al tema de tu experiencia, puedes usar tu propio conjunto de activos personalizados en lugar de los predeterminados. Esto se puede hacer a través de la función configurar, llamada desde un Script en ServerScriptService.

Script

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

Limpiar Todos los Lienzos

Para eliminar todo el arte existente de todos los lienzos en el mundo, llama a la función removeAllArt desde un Script.

Script

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

Mostrar Efectos Personalizados

Puede haber casos en los que desees incluir efectos visuales adicionales al colocar una obra de arte. Este módulo expone un evento llamado artChanged en el cliente al que puedes conectar y agregar tu propia 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
-- Mostrar algunas chispas durante 3 segundos
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Referencia de API

Tipos

SurfaceArtAsset

Las imágenes que se usarán como arte para el lienzo se representan mediante una tabla con dos valores.

ClaveDescripción
nameNombre de visualización de metadatos.
assetIdID de activo de la imagen a incluir.

Funciones

configurar

configure(config: table)

Sobrescribe las opciones de configuración predeterminadas a través de las siguientes claves/valores en la tabla config. Esta función solo puede ser llamada desde un Script.

ClaveDescripciónPredeterminado
enabledActiva o desactiva la funcionalidad del módulo.true
assetsLista de tipos de SurfaceArtAsset.(ver código debajo)
quotaPerPlayerNúmero máximo de piezas de arte que puede colocar cada jugador.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

Devuelve todos los lienzos etiquetados con la etiqueta SurfaceCanvas.

Script

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

placeArt

placeArt(player: Player, canvas: BasePart)

Coloca una pieza de arte programáticamente en nombre de un jugador. Ten en cuenta que el objeto canvas debe estar etiquetado con la etiqueta SurfaceCanvas cuando se inicializa el servidor. Se recomienda usar esto solo con un lienzo devuelto desde getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Colocar el premio Bloxy de los activos de arte predeterminados en el primer lienzo
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

Elimina todas las obras de arte de todas las superficies.

Script

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

Eventos

artChanged

Se activa cuando se cambia una obra de arte en un lugar particular de un lienzo. Cuando se elimina una obra de arte, artId será nil. Ten en cuenta que se pasa un valor Vector3 como tercer parámetro al controlador de eventos para que puedas posicionar un efecto personalizado en la posición exacta donde se coloca la obra de arte. Este evento solo puede ser conectado en un LocalScript.

Parámetros
canvas: BasePartLienzo sobre el cual se cambió la obra de arte.
spot: FrameFrame interno que contiene la obra de arte ImageLabel.
spotPosition: Vector3Posición exacta donde se colocó la obra de arte.
artId: stringID de activo de la nueva obra de arte.
ownerUserId: numberUserId del jugador que colocó el arte.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Arte colocado en:", spotPosition)
print("ID del activo de arte:", artId)
print("Arte colocado por:", ownerId)
end)

promptShown

Se activa cuando se muestra un aviso de interacción con el lienzo a un jugador. La función conectada recibe el lienzo sobre el cual se está mostrando el aviso. Este evento solo puede ser conectado en un LocalScript.

Parámetros
canvas: BasePartLienzo sobre el cual se muestra el aviso.
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

Se activa cuando se oculta un aviso de interacción con el lienzo. La función conectada recibe el lienzo sobre el cual se estaba mostrando el aviso. Este evento solo puede ser conectado en un LocalScript.

Parámetros
canvas: BasePartLienzo sobre el cual se estaba mostrando el aviso.
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

Se activa cuando se muestra la interfaz de usuario del selector de arte de superficie a un jugador. Este evento solo puede ser conectado en un LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "abrió el selector de arte de superficie")
end)

selectorHidden

Se activa cuando se oculta la interfaz de usuario del selector de arte de superficie para un jugador. Este evento solo puede ser conectado en un LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "cerró el selector de arte de superficie")
end)
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.