Art de Surface

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Les joueurs aiment souvent se sentir comme s'ils faisaient partie de la construction de l'espace dans lequel ils se trouvent. Le module SurfaceArt développeur permet aux joueurs de laisser littéralement leur marque dans une expérience.

Utilisation du Module

Installation

Pour utiliser le module SurfaceArt dans une expérience :

  1. Dans le menu Fenêtre de Studio ou la barre d'outils de l'onglet Accueil, ouvrez le Toolbox et sélectionnez l'onglet Boutique Créateur.

  2. Assurez-vous que le tri Modèles est sélectionné, puis cliquez sur le bouton Voir Tout pour Catégories.

  3. Localisez et cliquez sur le carreau Packages.

  4. Localisez le module Art de Surface et cliquez dessus, ou faites-le glisser dans la vue 3D.

  5. Dans la fenêtre Explorateur, déplacez le modèle SurfaceArt entier dans ReplicatedStorage. Lorsque l'expérience sera exécutée, le module commencera à fonctionner.

Positionnement de la Toile

Le module est livré avec un modèle SurfaceCanvas que vous pouvez positionner dans le monde 3D. Ce modèle est celui avec lequel les joueurs interagiront pour placer de l'art sur sa surface.

  1. Localisez le maillage SurfaceCanvas dans le dossier Workspace du dossier principal du module.

  2. Déplacez-le dans la hiérarchie Workspace de premier niveau et positionnez-le où vous le souhaitez.

  3. Lors de la publication/de l'exécution d'une session de test, les joueurs pourront interagir avec l'objet via un ProximityPrompt et placer de l'art sur la surface définie.

Changement de la Face de la Toile

Sur le plan technique, le module utilise un SurfaceGui pour afficher les éléments d'art. Pour configurer quelle surface l'art apparaît :

  1. Sélectionnez le maillage SurfaceCanvas.

  2. En bas de la fenêtre Propriétés, localisez l'attribut SurfaceCanvasFace avec une valeur par défaut de Droite.

  3. Cliquez sur l'attribut et entrez l'une des six valeurs qui décrivent un Enum.NormalId.

Utilisation d'Actifs d'Art Personnalisés

Pour mieux s'adapter au thème de votre expérience, vous pouvez utiliser votre propre ensemble d'actifs personnalisés au lieu des valeurs par défaut. Cela peut être fait via la fonction configurer, appelée depuis un Script dans ServerScriptService.

Script

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

Effacer Tous les Toiles

Pour retirer tout l'art existant de toutes les toiles dans le monde, appelez la fonction removeAllArt depuis un Script.

Script

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

Affichage d'Effets Personnalisés

Il peut y avoir des cas où vous souhaitez inclure des effets visuels supplémentaires lorsqu'une œuvre d'art est placée. Ce module expose un événement appelé artChanged sur le client que vous pouvez connecter et ajouter votre propre logique.

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
-- Montre quelques étincelles pendant 3 secondes
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Référence API

Types

SurfaceArtAsset

Les images à utiliser comme art pour la toile sont représentées par une table avec deux valeurs.

CléDescription
nameNom d'affichage des métadonnées.
assetIdID d'actif de l'image à inclure.

Fonctions

configurer

configurer(config: table)

Remplace les options de configuration par défaut à travers les différentes clés/valeurs dans la table config. Cette fonction ne peut être appelée que depuis un Script.

CléDescriptionPar défaut
enabledActive ou désactive la fonctionnalité du module.true
assetsListe des types SurfaceArtAsset.(voir code ci-dessous)
quotaPerPlayerNombre maximum de pièces d'art pouvant être placées par chaque joueur.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

Renvoie toutes les toiles marquées avec l'étiquette SurfaceCanvas.

Script

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

placeArt

placeArt(player: Player, canvas: BasePart)

Place une pièce d'art par programmation au nom d'un joueur. Notez que l'objet canvas doit être marqué avec l'étiquette SurfaceCanvas lors de l'initialisation du serveur. Il est recommandé de n'utiliser cela qu'avec une toile retournée par getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Place le Bloxy Award des actifs d'art par défaut dans la première toile
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

Supprime toutes les œuvres d'art de toutes les surfaces.

Script

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

Événements

artChanged

Se déclenche lorsqu'une œuvre d'art est changée à un endroit particulier sur une toile. Lorsqu'une œuvre d'art est supprimée, artId sera nil. Notez qu'une valeur Vector3 est passée comme troisième paramètre au gestionnaire d'événements afin que vous puissiez positionner un effet personnalisé à l'endroit exact où l'œuvre d'art est placée. Cet événement peut uniquement être connecté dans un LocalScript.

Paramètres
canvas: BasePartToile sur laquelle l'œuvre d'art a été changée.
spot: FrameFrame interne qui contient le ImageLabel de l'œuvre d'art.
spotPosition: Vector3Position exacte où l'œuvre d'art a été placée.
artId: stringID d'actif de la nouvelle œuvre d'art.
ownerUserId: numberUserId du joueur qui a placé l'art.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Art placé à:", spotPosition)
print("ID d'art d'actif:", artId)
print("Art placé par:", ownerId)
end)

promptShown

Se déclenche lorsqu'une invite d'interaction de la toile est montrée à un joueur. La fonction connectée reçoit la toile sur laquelle l'invite est affichée. Cet événement ne peut être connecté que dans un LocalScript.

Paramètres
canvas: BasePartToile sur laquelle l'invite est affichée.
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 déclenche lorsqu'une invite d'interaction de la toile est masquée. La fonction connectée reçoit la toile sur laquelle l'invite était affichée. Cet événement ne peut être connecté que dans un LocalScript.

Paramètres
canvas: BasePartToile sur laquelle l'invite était affichée.
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 déclenche lorsque l'interface utilisateur du sélecteur d'art de surface est montrée à un joueur. Cet événement peut seulement être connecté dans 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, "ouvert sélecteur d'art de surface")
end)

selectorHidden

Se déclenche lorsque l'interface utilisateur du sélecteur d'art de surface est masquée pour un joueur. Cet événement peut seulement être connecté dans 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, "fermé sélecteur d'art de surface")
end)
©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.