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:
Von der Ansicht-Registerkarte öffnen Sie die Werkzeugkiste und wählen Sie die Creator-Store -Registerkarte.
Stellen Sie sicher, dass die Models Sortierung ausgewählt ist, dann klicken Sie auf die Alle anzeigen Schaltfläche für Kategorien .
Suchen Sie die Dev-Module -Kachel und klicken Sie darauf.
Suchen Sie das Oberflächenkunst -Modul und klicken Sie darauf, oder ziehen Sie es in die 3D-Ansicht.
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.
Suchen Sie das Oberflächenkanvas -Mesh innerhalb der Arbeitsbereich-Folge -Ordner der Hauptordner des Moduls.
Bewegen Sie es in die oberste Arbeitsbereich Hierarchie und positionieren Sie es dort, wo Sie möchten.
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:
Wählen Sie das Oberflächenkanvas Mesh.
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>.
Klicken Sie auf das Attribut und geben Sie einen von sechs Werten ein, die eine Enum.NormalId beschreiben.
Attributwert | Entsprechende 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üssel | Beschreibung |
---|---|
name | Name der Metadatenanzeige. |
assetId | Asset-ID des Bildes, die integriert werden soll. |
Funktionen
konfigurieren
Überschreibt Standard-Konfigurationsoptionen durch die folgenden Schlüssel/ Werte in der config Tabelle. Diese Funktion kann nur von einem Script aufgerufen werden.
Schlüssel | Beschreibung | Standard |
---|---|---|
enabled | Schaltet die Funktionalität des Moduls ein oder aus. | wahr |
assets | Liste der Oberflächen-Kunst-Asset-Typen . | (siehe code unten) |
quotaPerPlayer | Maximale 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
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
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
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: BasePart | Leinwand, auf dem das Kunstwerk geändert wurde. |
Punkt: Frame | Intern Frame , das die Kunst ImageLabel enthält. |
SpotPosition: Vector3 | Genauere Position, in der das Kunstwerk platziert wurde. |
artId: string | Asset-ID der neuen Kunstwerke. |
besitzerUserID: number | UserId 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: BasePart | Leinwand, 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: BasePart | Leinwand, 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)