Arte de la 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 a menudo les gusta sentirse como si fueran parte de la construcción del espacio en el que se encuentran. El modulo de desarrollador de SurfaceArt deja que los jugadores dejaran literalmente su marca en una experiencia.

Uso de módulos

Instalación

Para usar el módulo Superficie de arte en una experiencia:

  1. De la pestaña Ver, abra la Caja de herramientas y seleccione la pestaña Tienda del Creador .

    Toolbox toggle button in Studio
  2. Asegúrese de que se seleccione el Modelos clasificación y luego haga clic en el botón Ver Todo para Categorías .

  3. Ubique y haga clic en el mosaico de Modulos de Dev .

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

  5. En la ventana Explorer, mueva el modelo entero de Superficie de Arte a Servicio de Script del Servidor . Al ejecutar la experiencia, el módulo se distribuirá a varios servicios y comenzará a funcionar.

Colocando la pizarra

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

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

  2. Móvelo a la nivel superior de la hierarquía del espacio de trabajo y colócalo donde quieras.

  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.

Cambiar la Cara del Canvas

Bajo el capó, el módulo usa un SurfaceGui para mostrar artículos de arte. Para configurar en qué superficie se muestran los artículos de arte:

  1. Seleccione el lienzo de superficie malla.

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

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

Valor de atributoID de Normal Correspondiente
Frente Enum.NormalId.Front
Regresar a la página principal Enum.NormalId.Back
Derecha Enum.NormalId.Right
Izquierda Enum.NormalId.Left
Superior Enum.NormalId.Top
Inferior Enum.NormalId.Bottom

Usando imágenes personalizadas

Para mejorar el tema de tu experiencia, puedes usar tu propio conjunto de recursos personalizados en lugar de los valores predeterminados. Esto se puede hacer a través de la función 配置, llamada desde un Script en Servicio de Script del 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,
})

Limpiando todos los lienzos

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

Script

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

Mostrando Efectos Personalizados

Hay casos en los que puede que quieras incluir efectos visuales adicionales cuando se coloca un arte. Este módulo expone un evento llamado artChanged en el cliente que puedes conectar y añadir tu propia lógica.

Script 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 brillos por 3 segundos
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Referencia de API

Tipos

Arte de la superficie

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

ClaveDescripción
nameNombre de la etiqueta 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 llaves/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 SuperficieArtAsset .(ver código a continuación)
quotaPerPlayerNúmero máximo de piezas de arte que se pueden colocar por cada jugador.2
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("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:WaitForChild("SurfaceArt"))
local canvases = SurfaceArt.getCanvases()

ColocarArte

Colocar(jugador: Player, canvas: BasePart )

Coloca un objeto de arte programáticamente en nombre de un jugador. Nota que el objeto canvas debe tener la etiqueta de SurfaceCanvas cuando se inicializa el servidor. Se recomienda utilizar esto solo con un objeto de canvas devuelto de getCanvases.

Script

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 las primeras imágenes de tu galería
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

Eliminar todoArte

Eliminar todo el arte()

Elimina toda la pintura de todas las superficies.

Script

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

Eventos

arteCambiado

Dispara cuando se cambia un artefacto en una ubicación específica en un lienzo. Cuando se elimina un artefacto, artId se convertirá en nil . Nota que un valor de Vector3 se pasará como el tercer parámetro al evento handler para que pueda colocar

Parámetros
canvas: BasePartCanvas en el que se cambió el arte.
sitio: FrameInterno Frame que contiene el arte ImageLabel .
posición de spot: Vector3Posición exacta donde se colocó el arte.
artId: stringID de la nueva obra de arte.
Propietario de propiedad: numberUserId del jugador que colocó el arte.
Script 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)

提示Show

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

Parámetros
canvas: BasePartCanvas en el que se muestra el mensaje.
Script 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)

solicitudHidden

Se activa cuando se oculta una invitación de interacción de un 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
canvas: BasePartCanvas en el que se mostraba el mensaje.
Script 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)

Selector mostrado

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

Script 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)

Selector oculto

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

Script 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)