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:
De la pestaña Ver, abra la Caja de herramientas y seleccione la pestaña Tienda del Creador .
Asegúrese de que se seleccione el Modelos clasificación y luego haga clic en el botón Ver Todo para Categorías .
Ubique y haga clic en el mosaico de Modulos de Dev .
Usted encuentra el módulo Superficie de Arte y haz clic en él, o arrástralo y suéltalo en la vista 3D.
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.
Ubique la Capa de superficie malla dentro de la carpeta Espacio de trabajo del directorio principal del módulo.
Móvelo a la nivel superior de la hierarquía del espacio de trabajo y colócalo donde quieras.
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:
Seleccione el lienzo de superficie malla.
En la parte inferior de la ventana Propiedades , localiza el atributo Superficie de lienzo con un valor predeterminado de Derecha .
Haga clic en el atributo y ingrese uno de los seis valores que describen un Enum.NormalId .
Valor de atributo | ID 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.
Clave | Descripción |
---|---|
name | Nombre de la etiqueta de metadatos. |
assetId | ID de activo de la imagen para incluir. |
Funciones
configurar
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 .
Clave | Descripción | Por defecto |
---|---|---|
enabled | Alterna la funcionalidad del módulo en o desactivado. | cierto |
assets | Lista de tipos de SuperficieArtAsset . | (ver código a continuación) |
quotaPerPlayer | Nú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
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
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
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: BasePart | Canvas en el que se cambió el arte. |
sitio: Frame | Interno Frame que contiene el arte ImageLabel . |
posición de spot: Vector3 | Posición exacta donde se colocó el arte. |
artId: string | ID de la nueva obra de arte. |
Propietario de propiedad: number | UserId 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: BasePart | Canvas 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: BasePart | Canvas 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)