Oberflächliche Kunst

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

Spieler genießen oft das Gefühl, Teil des Raums zu sein, in dem sie sich befinden. Die Oberfläche-Kunst Entwickler-Modul lässt Spieler buchstäblich ihre Markierung in einem Erlebnis hinterlassen.

Modul-Einsatz

Installation

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

  1. Von der Ansicht-Registerkarte öffnen Sie die Werkzeugkiste und wählen Sie die Creator-Store -Registerkarte.

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

  3. Suchen Sie die Dev-Module -Kachel und klicken Sie darauf.

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

  5. In dem Explorer-Fenster bewegen Sie das gesamte Oberflächenmodell in ServerScriptService . Nach dem Laufen der Erlebniswird das Modul auf verschiedene Dienste verteilt und beginnt zu laufen.

Platzieren des Kanvases

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

  1. Suchen Sie das Oberflächenkanvas -Mesh innerhalb der Arbeitsbereich-Folge -Ordner der Hauptordner des Moduls.

  2. Bewegen Sie es in die oberste Arbeitsbereich Hierarchie und positionieren Sie es dort, wo Sie möchten.

  3. Nach der Veröffentlichung/Ausführung eines Test-Sitzung, werden Spieler in der Lage sein, mit dem Objekt über ein ProximityPrompt zu interagieren und Kunst auf der definierten Oberfläche zu platzieren.

Ändern des Gesichts auf der Leinwand

Unter der Haube verwendet das Modul ein SurfaceGui, um Kunstgegenstände anzuzeigen. Um zu konfigurieren, auf welcher Oberfläche die Kunst erscheint:

  1. Wählen Sie das Oberflächenkanvas Mesh.

  2. At the bottom of the <a href="https://developer.microsoft.com/en-us/microsoft-power-edge/microsoft-power-edge-desktop"> Properties</a> window, locate the <a href="/resources/modules/https:/developer.microsoft.com/en-us/microsoft-power-edge/microsoft-power-edge-desktop" target="_blank"> SurfaceCanvasFace </a> attribute with a default value of <a href="/resources/modules/https:/developer.microsoft.com/en-us/microsoft-power-edge/microsoft-power-edge-desktop" target="_blank"> Right </a>.

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

AttributwertEntsprechende Normale ID
Vorderseite Enum.NormalId.Front
Zurück Enum.NormalId.Back
Rechts Enum.NormalId.Right
Links Enum.NormalId.Left
oben Enum.NormalId.Top
Untere(s) Enum.NormalId.Bottom

Benutzung benutzerdefinierter Kunstassets

Um das Thema deines Erlebnisses besser anzupassen, kannst du deine eigenen benutzerdefinierten Assets verwenden, anstatt der Standard-Assets. Dies kann über die konfigurieren-Funktion, die von einem Script in ServerScriptService aufgerufen wird, getan werden.

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 bestehenden Kunstwerke von allen Leinwänden in der Welt zu entfernen, rufen Sie die entfernenAllArt Funktion aus einem Script auf.

Skript

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

Benutzerdefinierte Effekte anzeigen

Es gibt Fälle, in denen Sie zusätzliche visuelle Effekte hinzufügen möchten, wenn ein Kunstwerk platziert wird. Dieses Modul zeigt ein Ereignis namens artChanged auf dem Client, mit dem Sie sich verbinden und Ihre 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 ein paar Funkeln für 3 Sekunden
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

API-Referenz

Typen

OberflächeArtAsset

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

SchlüsselBeschreibung
nameName der Metadatenanzeige.
assetIdAsset-ID des Bildes, die integriert werden soll.

Funktionen

konfigurieren

konfigurieren(config: table )

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

SchlüsselBeschreibungStandard
enabledSchaltet die Funktionalität des Moduls ein oder aus.wahr
assetsListe der Oberflächen-Kunst-Asset-Typen .(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,
})

erhaltenKanvasen

erhalteKanvasen: table

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

Skript

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

Kunst an Ort

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

Platziert ein Kunststück-Programm auf behalf eines Spieler:in. Beachten Sie, dass das canvas -Objekt mit dem SurfaceCanvas -Tag versehen sein muss, wenn der Server initialisiert wird. Es wird empfohlen, dies nur mit einem von getCanvases zurückgegebenem Canvas zu verwenden.

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 der Standard-Kunst资源 in die erste Leinwand
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

entfernenAllArt

entfernenAllArt()

Entfernt alle Kunst von allen Oberflächen.

Skript

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

Ereignisse

kunstÄndern

Feuert, wenn ein Kunstwerk an einem bestimmten Ort auf einer Leinwand geändert wird. Wenn ein Kunstwerk entfernt wird, wird artId mit nil sein. Beachten Sie, dass ein Vector3 -Wert als dritter Parallelbereich an den Ereignishändler übergeben wird, damit Sie einen

Parameter
Leinwand: BasePartLeinwand, auf dem das Kunstwerk geändert wurde.
Punkt: FrameIntern Frame , das die Kunst ImageLabel enthält.
SpotPosition: Vector3Genauere Position, in der das Kunstwerk platziert wurde.
artId: stringAsset-ID der neuen Kunstwerke.
besitzerUserID: numberUserId des Spielers, der das Kunstwerk 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)

promptZeigt

Feuert ab, wenn eine Kachelinteraktionsanfrage an einen Spieler:inangezeigt wird. Die verbundene Funktion erhält die Kachel, auf der die Anfrage angezeigt wird. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
Leinwand: BasePartLeinwand, auf der die Anfrage 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)

Hidden

Feuert, wenn eine Kachelinteraktionsanfrage ausgeblendet wird. Die verbundene Funktion erhält die Kachel, auf der die Anfrage angezeigt wird. Dieses Ereignis kann nur in einem LocalScript verbunden werden.

Parameter
Leinwand: BasePartLeinwand, auf der die Anfrage 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)

ShowSelector

Feuert ab, wenn die Oberfläche-Kunstauswahl-Benutzeroberfläche 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)

SelectorHidden

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)