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:
Stellen Sie sicher, dass die Sortierung der Modelle ausgewählt ist, dann klicken Sie auf die Schaltfläche Alle sehen für Kategorien .
Suchen und klicken Sie auf die Entwickler-Module -Kachel.
Suchen Sie das Oberflächen-Kunst -Modul und klicken Sie darauf, oder ziehen Sie es in die 3D-Ansicht.
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.
Lokalisieren Sie das Oberflächennetz Mesh innerhalb des Arbeitsordners des Hauptordners des Moduls.
Bewegen Sie es in die oberste Ebene der Arbeitsplatz -Hierarchie und positionieren Sie es dort, wo gewünscht.
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:
Wählen Sie das Oberflächen canvas -Mesh.
Am unteren Rand des Fensters Eigenschaften , suche den Attribut Oberflächenkanvasface mit einem Standardwert von Rechts .
Klicken Sie auf das Attribut und geben Sie einen der sechs Werte ein, die eine Enum.NormalId beschreiben.
Wert des Attributes | Korrespondierende 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.
Schlave | Beschreibung |
---|---|
name | Name der Metadatenanzeige. |
assetId | Asset-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.
Schlave | Beschreibung | Standardmäßig |
---|---|---|
enabled | Schaltet die Funktionalität des Moduls ein oder aus. | wahr |
assets | Liste von Oberflächenart-Assets Arten. | (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,})
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
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: BasePart | Leinwand, auf der das Kunstwerk geändert wurde. |
punkt: Frame | Interne Frame, die das Kunstwerk ImageLabel enthält. |
spotPosition: Vector3 | Genaue Position, an der das Kunstwerk platziert wurde. |
artId: string | Asset-ID des neuen Kunstwerks. |
Eigentümer-ID: number | UserId 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: BasePart | Leinwand, 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: BasePart | Leinwand, 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)