Oberflächenkunst

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

Spieler genießen es oft, sich wie ein Teil der Konstruktion des Raums zu fühlen, in dem sie sich befinden.Das Oberflächen-Modul des Entwicklers lässt Spieler ihre Markierung buchstäblich in einem Erlebnis hinterlassen.

Modul-Verwendung

Installationen

Um das Oberflächen-Modul in einem Erlebnis zu verwenden:

  1. Von der Ansicht-Registerkarte öffne die Toolbox und wähle die Creator-Store -Registerkarte aus.

    Toolbox toggle button in Studio
  2. Stellen Sie sicher, dass die Sortierung der Modelle ausgewählt ist, dann klicken Sie auf die Schaltfläche Alle sehen für Kategorien .

  3. Suchen und klicken Sie auf die Entwickler-Module -Kachel.

  4. Suchen Sie das Oberflächen-Kunst -Modul und klicken Sie darauf, oder ziehen Sie es in die 3D-Ansicht.

  5. In dem Explorer Fenster, verschiebe das gesamte SurfaceArt Modell in ServerScriptService .Wenn das Erlebnis ausgeführt wird, verteilt sich das Modul auf verschiedene Dienste und beginnt zu laufen.

Kanvas positionieren

Das Modul kommt mit einem Oberflächen canvas -Modell, das du in der 3D-Welt positionieren kannst.Dieses Modell ist das, mit dem Spieler interagieren, um Kunst auf seiner Oberfläche zu platzieren.

  1. Lokalisieren Sie das Oberflächennetz Mesh innerhalb des Arbeitsordners des Hauptordners des Moduls.

  2. Bewegen Sie es in die oberste Ebene der Arbeitsplatz -Hierarchie und positionieren Sie es dort, wo gewünscht.

  3. Nach der Veröffentlichung/Ausführung einer Sitzungkönnen Spieler mit dem Objekt über eine ProximityPrompt interagieren und Kunst auf der definierten Oberfläche platzieren.

Das Canvas-Gesicht ändern

Unter der Motorhaube verwendet das Modul ein SurfaceGui, um Kunstwerke anzuzeigen. Um zu konfigurieren, auf welcher Oberfläche das Kunstwerk angezeigt wird:

  1. Wählen Sie das Oberflächen canvas -Mesh.

  2. Am unteren Rand des Fensters Eigenschaften , suche den Attribut Oberflächenkanvasface mit einem Standardwert von Rechts .

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

Wert des AttributesKorrespondierende normale ID
Vordere Enum.NormalId.Front
Zurück Enum.NormalId.Back
Rechts Enum.NormalId.Right
Linker Enum.NormalId.Left
Oben Enum.NormalId.Top
Unten Enum.NormalId.Bottom

Verwendung von benutzerdefinierten Kunst-Assets

Um das Thema deiner Erlebnisbesser zu passen, kannst du deine eigenen benutzerdefinierten Assets verwenden, anstatt die Standardeinstellungen.Dies kann über die configure -Funktion erfolgen, die von einem in ServerScriptService aufgerufen wird.

Skript

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

Alle Leinwände löschen

Um alle bestehende Kunst von allen Leinwänden der Welt zu entfernen, rufe die removeAllArt Funktion von einem auf.

Skript

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

Benutzerdefinierte Effekte anzeigen

Es kann Fälle geben, in denen du zusätzliche visuelle Effekte einfügen möchtest, wenn ein Kunstwerk platziert wird.Dieses Modul legt ein Ereignis namens artChanged auf dem Client frei, zu dem Sie sich verbinden und eigene Logik hinzufügen können.

Lokales Skript

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

APIReferenz

Arten

Oberflächenart-Asset

Bilder, die als Kunst für die Leinwand verwendet werden, werden durch einen Tisch mit zwei Werten dargestellt.

SchlaveBeschreibung
nameName der Metadatenanzeige.
assetIdAsset-ID des Bildes, das einzufügen ist.

Funktionen

konfigurieren

konfigurieren(config: table )

Übernimmt Standard-Konfigurationsoptionen durch die folgenden Schlüssel-/Werte in der config Tabelle.Diese Funktion kann nur von einem Script aufgerufen werden.

SchlaveBeschreibungStandardmäßig
enabledSchaltet die Funktionalität des Moduls ein oder aus.wahr
assetsListe von Oberflächenart-Assets Arten.(siehe code unten)
quotaPerPlayerMaximale Anzahl von Kunststücken, die von jedem Spieler:inplatziert werden können.2
Skript

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

erhaltenCanvases

getCanvases(): table

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

Skript

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

platzArt

placeArt(Spieler:in: Player , Kanvas: BasePart )

Platziert ein Kunststück programmatisch im Namen eines Spieler:in.Beachten Sie, dass das canvas Objekt mit dem SurfaceCanvas Tag gekennzeichnet werden muss, wenn der Server initialisiert wird.Es wird empfohlen, dies nur mit einer Leinwand zu verwenden, die aus getCanvases zurückgegeben wurde.

Skript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Platziere den Bloxy Award aus Standard-Kunstressourcen auf die erste Leinwand
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

alle entfernenArt

entfernenAllArt()

Entfernt alle Kunst von allen Oberflächen.

Skript

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

Ereignisse

Kunst geändert

Feuert, wenn ein Kunstwerk an einem bestimmten Ort auf einer Leinwand geändert wird.Wenn ein Kunstwerk entfernt wird, wird .Beachten Sie, dass ein Wert von Vector3 als dritter Parameter an den Event-Handler übergeben wird, damit Sie einen benutzerdefinierten Effekt an der genauen Stelle platzieren können, an der die Kunstwerk platziert wird.Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
leinwand: BasePartLeinwand, auf der das Kunstwerk geändert wurde.
punkt: FrameInterne Frame, die das Kunstwerk ImageLabel enthält.
spotPosition: Vector3Genaue Position, an der das Kunstwerk platziert wurde.
artId: stringAsset-ID des neuen Kunstwerks.
Eigentümer-ID: numberUserId des spielers, der die kunst platziert hat.
Lokales Skript

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)

promptAngezeigt

Feuert, wenn ein Canvas-Interaktions prompt einem Spieler:inangezeigt wird.Die verbundene Funktion erhält die Kanvas, auf der die Eingabeaufforderung angezeigt wird.Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
leinwand: BasePartLeinwand, auf der die Aufforderung angezeigt wird.
Lokales Skript

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)

promptVerborgen

Feuert, wenn ein Canvas-Interaktions prompt ausgeblendet wird.Die verbundene Funktion erhält die Kanvas, auf der die Eingabeaufforderung angezeigt wurde.Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
leinwand: BasePartLeinwand, auf der die Eingabeaufforderung angezeigt wurde.
Lokales Skript

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)

AuswahlShown

Feuert, wenn die Oberflächen-Kunstauswahl-UI einem Spieler:inangezeigt wird. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Lokales Skript

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)

Auswahl versteckt

Feuert, wenn die Oberflächen-Kunstauswahl-UI für einen Spieler:inausgeblendet wird. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Lokales Skript

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)