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 :
À partir de l'Affichage onglet, ouvrez la boîte à outils et sélectionnez l' boutique des créateurs onglet.
Assurez-vous que le tri par Modèles est sélectionné, puis cliquez sur le bouton Voir tout pour Catégories.
Localisez et cliquez sur la case modules de pavé .
Localisez le art de surface module et cliquez dessus, ou glissez-le dans la voir3D.
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.
Localisez le SurfaceCanvas maillage à l'intérieur du dossier Espace de travail du dossier principal du module.
Déplacez-le dans la hiérarchie de niveau supérieur Workspace 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 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 :
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 Droit .
Cliquez sur l'attribut et entrez l'un des six valeurs qui décrivent un Enum.NormalId .
Valeur d'attribut | ID 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 |
---|---|
name | Nom de l'affiche de métadonnées. |
assetId | ID de ressource de l'image à inclure. |
Fonctions
configurer
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é | Description | Par défaut |
---|---|---|
enabled | Bascule la fonctionnalité du module sur oui ou off. | 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 |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
obtenir Canvases
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
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
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: BasePart | Canevas sur lequel l'art a été changé. |
zone : Frame | Class.Frame interne qui contient l'œuvre d'art ImageLabel. |
Position de l'espace : Vector3 | Position exacte où l'œuvre a été placée. |
artId : string | ID de la nouvelle œuvre d'art. |
Propriétaire de l'île : number | UserId 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: BasePart | Canevas 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: BasePart | Canevas 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)