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:
Asegúrese de que la clasificación de modelos esté seleccionada, luego haga clic en el botón Ver todo para categorías .
Localiza y haz clic en el mosaico Módulos de desarrollo .
Localiza el módulo Arte de superficie y haz clic en él, o arrástralo a la vista 3D.
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.
Localiza la superficie de lienzo malla dentro de la carpeta Espacio de trabajo del directorio principal del módulo.
Móvelo a la jerarquía de nivel superior Espacio de trabajo y colócalo donde se desee.
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:
Seleccione la malla lienzo de superficie .
En la parte inferior de la ventana Propiedades , localiza el atributo SuperficieCanvasFace con un valor predeterminado de Derecha .
Haga clic en el atributo y introduzca uno de los seis valores que describen un Enum.NormalId.
Valor de atributo | ID 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.
Clave | Descripción |
---|---|
name | Nombre de visualización de metadatos. |
assetId | ID 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 .
Clave | Descripción | Por defecto |
---|---|---|
enabled | Alterna la funcionalidad del módulo en o desactivado. | cierto |
assets | Lista de tipos de SurfaceArtAsset . | (ver código a continuación) |
quotaPerPlayer | Nú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
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: BasePart | Liencia sobre la cual se cambió el arte. |
espacio: Frame | Interno Frame que contiene la obra de arte ImageLabel . |
posición de destino: Vector3 | Posición exacta donde se colocó el arte. |
artId: string | ID de activo del nuevo arte. |
ownerUserId: number | UserId 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: BasePart | Lienzos 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: BasePart | Lienzos 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)