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 :
Assurez-vous que le tri des modèles est sélectionné, puis cliquez sur le bouton Voir tout pour les catégories .
Localisez et cliquez sur la case modules de développement .
Localisez le module Art de surface et cliquez dessus, ou glissez-déposez-le dans la voir3D.
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.
Localisez le SurfaceCanvas mesh à l'intérieur du dossier Espace de travail du dossier principal du module.
Déplacez-le dans la hiérarchie de niveau supérieur Espace de travail et positionnez-le où vous le souhaitez.
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 :
Sélectionnez le SurfaceCanvas maillage.
Au bas de la fenêtre Propriétés , localisez l'attribut SurfaceCanvasFace avec une valeur par défaut de Droite .
Cliquez sur l'attribut et entrez l'une des six valeurs qui décrivent un Enum.NormalId.
Valeur d'attribut | ID 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 |
---|---|
name | Nom d'affichage des métadonnées. |
assetId | ID 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é | Avertissement | Par défaut |
---|---|---|
enabled | Active ou désactive la fonctionnalité du module. | vrai |
assets | Liste des types SurfaceArtAsset . | (voir le code ci-dessous) |
quotaPerPlayer | Nombre 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
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 : BasePart | Canevas sur lequel l'œuvre a été modifiée. |
spot : Frame | Interne Frame qui contient l'œuvre ImageLabel . |
positionSpot : Vector3 | Position exacte où l'œuvre a été placée. |
artId : string | ID de ressource de la nouvelle œuvre d'art. |
uuid du propriétaire : number | UserId 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 : BasePart | Canevas 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 : BasePart | Canevas 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)