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 SurfaceArt module de développeur laisse les joueurs littéralement laisser leur marque dans une expérience.

Utilisation des modules

Installation

Pour utiliser le module Art de surface dans une expérience :

  1. À partir de l'Affichage onglet, ouvrez la boîte à outils et sélectionnez l' boutique des créateurs onglet.

    Toolbox toggle button in Studio
  2. Assurez-vous que le tri par Modèles est sélectionné, puis cliquez sur le bouton Voir tout pour Catégories.

  3. Localisez et cliquez sur la case modules de pavé .

  4. Localisez le art de surface module et cliquez dessus, ou glissez-le dans la voir3D.

  5. Dans la fenêtre Explorateur, déplacez le modèle entier de SurfaceArt dans ServerScriptService . Lors de l'exécution de l'expérience, le module se distribuera à différents services et commencera à s'exécuter.

Positionner le canevas

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

  1. Localisez le SurfaceCanvas maillage à l'intérieur du dossier Espace de travail du dossier principal du module.

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

  3. Lors de la publication/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.

Modifier le visage du canevas

Sous le capot, le module utilise un SurfaceGui pour afficher des articles d'art. Pour configurer sur quelle surface l'art apparaît :

  1. Sélectionnez le SurfaceCanvas maillage.

  2. Au bas de la fenêtre propriétés , localisez l'attribut SurfaceCanvasFace avec une valeur par défaut de Droit .

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

Valeur d'attributID normal correspondant
Avant Enum.NormalId.Front
Retournez à la page d'accueil Enum.NormalId.Back
Droit Enum.NormalId.Right
Gauche Enum.NormalId.Left
Haut de la page Enum.NormalId.Top
En bas Enum.NormalId.Bottom

Utiliser les ressources d'art personnalisées

Pour mieux refléter le thème de votre expérience, vous pouvez utiliser votre propre ensemble de ressources personnalisées au lieu des valeurs par défaut. Cela peut être fait via la fonction 配置, appelée à partir d'un Script dans ServerScriptService.

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

Nettoyage de tous les canaux

Pour supprimer tout l'art existant de tous les canaux dans le monde, appelez la fonction supprimer tout l'art à partir d'un Script.

Script

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

Afficher 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 nommé artChanged sur le client que vous pouvez connecter et ajouter votre propre logique.

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

Référence de l'API

Types

Art de la surface

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

CléDescription
nameNom de l'affiche de métadonnées.
assetIdID de ressource de l'image à inclure.

Fonctions

configurer

configurer(config: Library.table)

Les options de configuration par défaut sont remplacées par les valeurs/clés suivantes dans la table config. Ce paramètre ne peut être appelé que depuis un Script.

CléDescriptionPar défaut
enabledBascule la fonctionnalité du module sur oui ou off.vrai
assetsListe des types SurfaceArtAsset.(voir le code ci-dessous)
quotaPerPlayerNombre maximum de pièces d'art que chaque joueur peut placer.2
Script

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

obtenir Canvases

Obtenez les canevas : table

Renvoie tous les canaux colorés avec le tag SurfaceCanvas.

Script

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

placeArt

placeArt(joueur: Player, canvas: BasePart )

Place un programme d'art au nom d'un joueur. Notez que l'objet canvas doit être marqué avec le tag SurfaceCanvas lors de l'initialisation du serveur. Il est recommandé d'utiliser ceci avec un tableau renvoyé à partir de getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Placez le Bloxy Award à partir des ressources d'art par défaut dans le premier canevas
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

supprimer tout art

supprimer tout art™

Supprime tout l'art de toutes les surfaces.

Script

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

Événements

artModifier

Activer un feu quand un élément d'art est changé à un endroit particulier sur un tableau. Lorsque un élément d'art est supprimé, artId sera nil . Remarquez que une valeur Vector3 est transmise en tant que troisième paramètre à l'événement handleur afin que vous puiss

Paramètres
canevas: BasePartCanevas sur lequel l'art a été changé.
zone : FrameClass.Frame interne qui contient l'œuvre d'art ImageLabel.
Position de l'espace : Vector3Position exacte où l'œuvre a été placée.
artId : stringID de la nouvelle œuvre d'art.
Propriétaire de l'île : numberUserId du joueur qui a placé l'art.
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)

inviteShow

Se déclenche lorsqu'une demande d'interaction avec un tableau est affichée à un joueur. La fonction connectée reçoit le tableau sur lequel le message est affiché. Cet événement ne peut être connecté qu'à un LocalScript .

Paramètres
canevas: BasePartCanevas sur lequel l'invite est affiché.
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)

Invite caché

Se déclenche lorsqu'une demande d'interaction de toile est cachée. La fonction connectée reçoit la toile sur laquelle le message était affiché. Cet événement ne peut être connecté qu'à un LocalScript .

Paramètres
canevas: BasePartCanevas sur lequel l'invite était affiché.
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)

sélecteurAffiché

Se déclenche lorsque la surface sélecteur d'art du joueur est affichée. Cet événement ne peut être connecté qu'à 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)

sélecteurCaché

Se déclenche lorsque la surface sélecteur d'art de surface est cachée pour un joueur. Cet événement ne peut être connecté qu'à 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)