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

A los jugadores les gusta a menudo sentirse como parte de la construcción del espacio en el que se encuentran.El módulo desarrollador de superficie de arte deja que los jugadores literalmente dejen su marca en una experiencia.

Uso del módulo

Instalación

Para usar el módulo Arte de superficie en una experiencia:

  1. Desde la pestaña Ver, abra la Caja de herramientas y seleccione la pestaña Tienda de creadores .

    Toolbox toggle button in Studio
  2. Asegúrese de que la clasificación de modelos esté seleccionada, luego haga clic en el botón Ver todo para categorías .

  3. Localiza y haz clic en el mosaico Módulos de desarrollo .

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

  5. En la ventana Explorador, mueva todo el modelo SurfaceArt al servicio ServerScriptService .Al ejecutar la experiencia, el módulo se distribuirá a varios servicios y comenzará a funcionar.

Posicionar el lienzo

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

  1. Localiza la superficie de lienzo malla dentro de la carpeta Espacio de trabajo del directorio principal del módulo.

  2. Móvelo a la jerarquía de nivel superior Espacio de trabajo y colócalo donde se desee.

  3. Una vez que se publique/ejecute 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.

Cambiar la cara del lienzo

Debajo del capó, el módulo utiliza un SurfaceGui para mostrar artículos de arte. Para configurar en qué superficie aparece el arte:

  1. Seleccione la malla lienzo de superficie .

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

  3. Haga clic en el atributo y introduzca uno de los seis valores que describen un Enum.NormalId.

Valor de atributoID normal correspondiente
Delante Enum.NormalId.Front
Volver Enum.NormalId.Back
Derecha Enum.NormalId.Right
Izquierda Enum.NormalId.Left
Superior Enum.NormalId.Top
Inferior Enum.NormalId.Bottom

Usando recursos de arte personalizados

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

Guión

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

Limpiando todos los lienzos

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

Guión

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

Mostrar efectos personalizados

Puede haber casos en los que te gustaría incluir efectos visuales adicionales cuando se coloca una obra de arte.Este módulo expone un evento llamado artChanged en el cliente al que puedes conectarte y agregar tu propia lógica.

Guión local

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
-- Muestra algunos destellos durante 3 segundos
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Referencia de API

Tipos

Recurso de arte de superficie

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

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

Funciones

configurar

configurar(config: table )

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

ClaveDescripciónPor defecto
enabledAlterna la funcionalidad del módulo en o desactivado.cierto
assetsLista de tipos de SurfaceArtAsset .(ver código a continuación)
quotaPerPlayerNúmero máximo de piezas de arte que cada jugador puede colocar.2
Guión

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

obtener canvas

getCanvases(): table

Devuelve todos los lienzos etiquetados con la etiqueta SurfaceCanvas.

Guión

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

arte de lugar

placeArt( jugador: Player , lienzo: BasePart )

Coloca una pieza de arte de forma programática en nombre de un jugador.Tenga en cuenta que el objeto canvas debe ser etiquetado con la etiqueta SurfaceCanvas cuando el servidor se inicializa.Se recomienda utilizar esto solo con un lienzo devuelto de getCanvases.

Guión

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

removeAllArt

removeAllArt()

Elimina toda la obra de arte de todas las superficies.

Guión

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

Eventos

arteCambiado

Se activa cuando se cambia un arte en un lugar específico en un lienzo.Cuando se elimina una obra de arte, artId será nil .Tenga en cuenta que un valor Vector3 se pasa como tercer parámetro al manipulador de eventos para que pueda posicionar un efecto personalizado en la posición exacta en la que se coloca el arte.Este evento solo se puede conectar en un LocalScript .

Parámetros
lienzo: BasePartLiencia sobre la cual se cambió el arte.
espacio: FrameInterno Frame que contiene la obra de arte ImageLabel .
posición de destino: Vector3Posición exacta donde se colocó el arte.
artId: stringID de activo del nuevo arte.
ownerUserId: numberUserId del jugador que colocó el arte.
Guión local

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

Se enciende cuando se muestra un mensaje de interacción de lienzo a un jugador.La función conectada recibe el lienzo en el que se muestra el mensaje.Este evento solo se puede conectar en un LocalScript .

Parámetros
lienzo: BasePartLienzos en el que se muestra la solicitud.
Guión local

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)

escondidoPrompt

Se enciende cuando se oculta un mensaje de interacción de lienzo.La función conectada recibe el lienzo en el que se mostró el mensaje.Este evento solo se puede conectar en un LocalScript .

Parámetros
lienzo: BasePartLienzos en los que se mostró la ventana emergente.
Guión local

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

Se enciende cuando la interfaz de selección de arte de la superficie se muestra a un jugador. Este evento solo se puede conectar en un LocalScript .

Guión local

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)

seleccionadorHidden

Se enciende cuando la interfaz de selección de arte de la superficie está oculta para un jugador. Este evento solo se puede conectar en un LocalScript .

Guión local

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)