Oberflächenkunst

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Spieler haben oft Freude daran, ein Teil des Raums zu sein, in dem sie sich befinden. Das SurfaceArt Entwicklermodul ermöglicht es Spielern, buchstäblich ihren Eindruck in einer Erfahrung zu hinterlassen.

Modulnutzung

Installation

Um das SurfaceArt-Modul in einer Erfahrung zu verwenden:

  1. Öffnen Sie im Studio-Menü Fenster oder im Start-Tab die Toolbox und wählen Sie den Tab Creator Store.

  2. Stellen Sie sicher, dass die Sortierung auf Modelle eingestellt ist, und klicken Sie auf die Schaltfläche Alle anzeigen für Kategorien.

  3. Suchen Sie die Kachel Pakete und klicken Sie darauf.

  4. Suchen Sie das Surface Art-Modul und klicken Sie darauf oder ziehen Sie es in die 3D-Ansicht.

  5. Verschieben Sie das gesamte SurfaceArt-Modell im Explorer-Fenster in ReplicatedStorage. Bei Ausführung der Erfahrung wird das Modul aktiviert.

Positionierung der Leinwand

Das Modul enthält ein SurfaceCanvas-Modell, das Sie in der 3D-Welt positionieren können. Dieses Modell ist es, mit dem Spieler interagieren werden, um Kunstwerke auf seiner Oberfläche zu platzieren.

  1. Suchen Sie das SurfaceCanvas-Mesh im Workspace-Ordner des Hauptordners des Moduls.

  2. Verschieben Sie es in die oberste Workspace-Hierarchie und positionieren Sie es nach Belieben.

  3. Nach der Veröffentlichung/des Testlaufs können Spieler über einen ProximityPrompt mit dem Objekt interagieren und Kunstwerke auf der definierten Oberfläche platzieren.

Ändern der Leinwandfläche

Im Hintergrund verwendet das Modul eine SurfaceGui, um Kunstwerke anzuzeigen. Um zu konfigurieren, auf welcher Fläche die Kunst erscheint:

  1. Wählen Sie das SurfaceCanvas-Mesh aus.

  2. Suchen Sie unten im Fenster Eigenschaften das Attribut SurfaceCanvasFace mit dem Standardwert Rechts.

  3. Klicken Sie auf das Attribut und geben Sie einen der sechs Werte ein, die einen Enum.NormalId beschreiben.

Verwendung benutzerdefinierter Kunstzuweisungen

Um das Thema Ihrer Erfahrung besser anzupassen, können Sie anstelle der Standardassets Ihre eigenen benutzerdefinierten Assets verwenden. Dies kann über die konfigurieren-Funktion erfolgen, die aus einem Script im ServerScriptService aufgerufen wird.

Script

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

Alle Leinwände löschen

Um alle vorhandenen Kunstwerke von allen Leinwänden in der Welt zu entfernen, rufen Sie die removeAllArt-Funktion aus einem Script auf.

Script

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

Benutzerdefinierte Effekte anzeigen

Es kann Fälle geben, in denen Sie zusätzliche visuelle Effekte einfügen möchten, wenn ein Kunstwerk platziert wird. Dieses Modul stellt ein Ereignis namens artChanged auf dem Client zur Verfügung, an das Sie anschließen und Ihre eigene Logik hinzufügen können.

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
-- Zeigen Sie einige Funken für 3 Sekunden
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

API-Referenz

Typen

SurfaceArtAsset

Bilder, die als Kunstwerke für die Leinwand verwendet werden, werden durch eine Tabelle mit zwei Werten repräsentiert.

SchlüsselBeschreibung
nameAnzeige-Name der Metadaten.
assetIdAsset-ID des einzuschließenden Bildes.

Funktionen

configure

configure(config: table)

Überschreibt die Standardkonfigurationsoptionen über die folgenden Schlüssel/Werte in der config-Tabelle. Diese Funktion kann nur aus einem Script aufgerufen werden.

SchlüsselBeschreibungStandard
enabledSchaltet die Funktionalität des Moduls ein oder aus.true
assetsListe von SurfaceArtAsset-Typen.(siehe untenstehenden Code)
quotaPerPlayerMaximale Anzahl von Kunstwerken, die jeder Spieler platzieren kann.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

Gibt alle Leinwände zurück, die mit dem SurfaceCanvas-Tag ausgezeichnet sind.

Script

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

placeArt

placeArt(player: Player, canvas: BasePart)

Platziert ein Kunstwerk programmgesteuert im Namen eines Spielers. Beachten Sie, dass das canvas-Objekt mit dem SurfaceCanvas-Tag ausgezeichnet sein muss, wenn der Server initialisiert wird. Es wird empfohlen, dies nur mit einer Leinwand zu verwenden, die von getCanvases zurückgegeben wird.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Platziere den Bloxy Award aus den Standardkunstassets in der ersten Leinwand
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

Entfernt alle Kunstwerke von allen Oberflächen.

Script

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

Ereignisse

artChanged

Wird ausgelöst, wenn ein Kunstwerk an einem bestimmten Ort auf einer Leinwand geändert wird. Wenn ein Kunstwerk entfernt wird, ist artId nil. Beachten Sie, dass ein Wert vom Typ Vector3 als dritter Parameter an den Ereignishandler übergeben wird, damit Sie einen benutzerdefinierten Effekt an der genauen Position positionieren können, an der das Kunstwerk platziert wurde. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
canvas: BasePartLeinwand, auf der das Kunstwerk geändert wurde.
spot: FrameInternes Frame, das das Kunstwerk ImageLabel enthält.
spotPosition: Vector3Genauer Ort, an dem das Kunstwerk platziert wurde.
artId: stringAsset-ID des neuen Kunstwerks.
ownerUserId: numberUserId des Spielers, der die Kunst platziert hat.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Kunst platziert bei:", spotPosition)
print("Kunst Asset-ID:", artId)
print("Kunst platziert von:", ownerId)
end)

promptShown

Wird ausgelöst, wenn eine Leinwandsinteraktionsaufforderung einem Spieler angezeigt wird. Die verbundene Funktion erhält die Leinwand, auf der die Aufforderung angezeigt wird. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
canvas: BasePartLeinwand, auf der die Aufforderung angezeigt wird.
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

Wird ausgelöst, wenn eine Leinwandsinteraktionsaufforderung ausgeblendet wird. Die verbundene Funktion erhält die Leinwand, auf der die Aufforderung angezeigt wurde. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
canvas: BasePartLeinwand, auf der die Aufforderung angezeigt wurde.
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

Wird ausgelöst, wenn die Oberfläche Kunstauswahl-UI einem Spieler angezeigt wird. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "hat die Oberfläche Kunstauswahl geöffnet")
end)

selectorHidden

Wird ausgelöst, wenn die Oberfläche Kunstauswahl-UI für einen Spieler verborgen ist. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "hat die Oberfläche Kunstauswahl geschlossen")
end)
©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.