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 faisant partie de la construction de l'espace dans lequel ils se trouvent.Le module développeur de SurfaceArt laisse les joueurs littéralement laisser leur marque dans une expérience.

Utilisation du module

Étabissement

Pour utiliser le module SurfaceArt dans une expérience :

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

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

  3. Localisez et cliquez sur la case modules de développement .

  4. Localisez le module Art de surface et cliquez dessus, ou glissez-déposez-le dans la voir3D.

  5. Dans la fenêtre Explorateur, déplacez l'ensemble du modèle SurfaceArt dans ServerScriptService .Une fois l'expérience exécutée, le module se distribuera à différents services et commencera à fonctionner.

Positionner 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 SurfaceCanvas mesh à 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 Espace de travail 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 l'art sur la surface définie.

Changer le visage du canvas

Sous le capot, le module utilise un SurfaceGui pour afficher des objets d'art. Pour configurer la surface sur laquelle 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 Droite .

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

Valeur d'attributID normal correspondant
Avant Enum.NormalId.Front
Retour Enum.NormalId.Back
Droite Enum.NormalId.Right
Gauche Enum.NormalId.Left
Haut Enum.NormalId.Top
En bas Enum.NormalId.Bottom

Utiliser des ressources artistiques personnalisées

Pour mieux correspondre au 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 configurer, appelée à partir d'un Script dans ServerScriptService .

Scénario

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

Effacer tous les canevas

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

Scénario

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

Afficher les 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 auquel vous pouvez vous connecter et ajouter votre propre logique.

Lecteur localScript

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
-- Montrer 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

Les types

Ressource d'art surface

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

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

Fonctions

configurer

configurer(config: table )

Remplacements des options de configuration par défaut via les clés/ valeurs suivantes dans la table config .Cette fonction ne peut être appelée qu'à partir d'un Script .

CléAvertissementPar défaut
enabledActive ou désactive la fonctionnalité du module.vrai
assetsListe des types SurfaceArtAsset .(voir le code ci-dessous)
quotaPerPlayerNombre maximum de pièces d'art que chaque joueur peut placer.2
Scénario

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

obtenir des canevas

getCanvases(): table

Renvoie toutes les toiles marquées avec la balise SurfaceCanvas.

Scénario

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

lieuArt

placeArt(joueur: Player , canvas: BasePart )

Place une œuvre d'art de manière programmatique au nom d'un joueur.Notez que l'objet canvas doit être étiqueté avec la balise SurfaceCanvas lorsque le serveur est initialisé.Il est recommandé d'utiliser ceci uniquement avec une toile retournée de getCanvases .

Scénario

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

supprimerToutArt

supprimerToutArt()

Supprime toute l'œuvre de toutes les surfaces.

Scénario

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

Événements

art modifié

S'enflamme lorsqu'une œuvre d'art est modifiée à un endroit spécifique sur une toile.Lorsqu'un œuvre d'art est supprimée, artId sera nil.Notez qu'une valeur Vector3 est transmise en tant que troisième paramètre au gestionnaire d'événements afin que vous puissiez positionner un effet personnalisé à l'exact endroit où l'œuvre est placée.Cet événement ne peut être connecté qu'en LocalScript .

Paramètres
canevas : BasePartCanevas sur lequel l'œuvre a été modifiée.
spot : FrameInterne Frame qui contient l'œuvre ImageLabel .
positionSpot : Vector3Position exacte où l'œuvre a été placée.
artId : stringID de ressource de la nouvelle œuvre d'art.
uuid du propriétaire : numberUserId du joueur qui a placé l'art.
Lecteur localScript

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)

promptAffiché

Se déclenche lorsqu'une invite d'interaction de toile est affiché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é qu'en LocalScript .

Paramètres
canevas : BasePartCanevas sur lequel l'invite s'affiche.
Lecteur localScript

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)

promptHidden

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

Paramètres
canevas : BasePartCanevas sur lequel l'invite était affichée.
Lecteur localScript

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électionneurAffiché

S'allume lorsque l'interface utilisateur du sélecteur d'art de surface est affichée à un joueur. Cet événement ne peut être connecté qu'en LocalScript .

Lecteur localScript

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électeurHidden

S'enflamme lorsque l'interface utilisateur du sélecteur d'art de surface est cachée pour un joueur. Cet événement ne peut être connecté qu'en LocalScript .

Lecteur localScript

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)