Gracze często lubią poczuć, że są częścią budowania przestrzeni, w której się znajdują. The powierzchni艺术 模块 pozwala graczom dosłownie pozostawić swoją znak w doświadczeniu.
Użyj modułu
Instalacja
Aby użyć modułu SURFACEART w doświadczeniu:
Z zakładki Zobacz, otwórz Skrzynię narzędzi i wybierz Sklep z twórcami.
Upewnij się, że Modele sortowanie jest zaznaczone, a następnie kliknij przycisk Zobacz wszystko dla Kategorie.
Lokalizuj i klikaj na płytę Moduły Rozwoju .
Lokalizuj moduł Sztuka powierzchni i kliknij go lub przeciągnij go do 3D.
W oknie Explorer przenieś cały model SurfaceArt do ServerScriptService . Po uruchomieniu doświadczenia moduł zostanie rozdzielony na różne usługi i zacznie działać.
Pozycjonowanie płótna
Moduł kompatybilny z Kanwą powierzchni, którą można pozycjonować w świecie 3D. Ta kanwa jest tym, z czym gracze będą interagować, aby umieścić na jej powierzchni sztukę.
Lokalizuj Powierzchnię Canvas mesz w Workspace dyrektorze głównej katalogu modułu.
Przenieś go do najwyższego poziomu hierarchii Workspace i umieść go tam, gdzie chcesz.
Po opublikowaniu/zakończeniu sesjatestowej gracze będą mogli wchodzić w interakcję z obiektem za pośrednictwem ProximityPrompt i umieszczać sztukę na zdefiniowanej powierzchni.
Zmiana twarzy na płótnie
Pod maską, moduł używa SurfaceGui do wyświetlenia przedmiotów sztuki. Aby skonfigurować, na których powierzchniach pojawia się sztuka:
Wybierz Powierzchnię Canvas mesz.
W dalszej części okna Właściwości, znajdź atrybut Powierzchnia Canvas z domyślną wartością Prawo.
Kliknij atrybut i wpisz jedną z sześciu wartości, które opisują Enum.NormalId .
Wartość atrybutu | Zgadzający się Normal ID |
---|---|
Przednia część | Enum.NormalId.Front |
Powrót | Enum.NormalId.Back |
Prawo | Enum.NormalId.Right |
Lewo | Enum.NormalId.Left |
Góra | Enum.NormalId.Top |
Dół | Enum.NormalId.Bottom |
Używanie dostępnych zasobów artystycznych
Aby lepiej dopasować temat swojego doświadczenia, możesz użyć własnego zestawu dostosowanych zasobów zamiast domyślnych. To można zostać zrobione poprzez funkcję konfiguruj, która została zdefiniowana z Script w ServerScriptService.
Skrypt
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,})
Wyczyść wszystkie płótna
Aby usunąć wszystkie istniejące dzieła z wszystkich płóтен w całym świecie, wezwij funkcję usuń wszystkie dzieła z Script.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Pokazywanie efektów niestandardowych
Może być tak, że chcesz dodać dodatkowe efekty wizualne, gdy dzieło sztuki zostanie postawione. Ten moduł wyświetla wydarzenie nazyjące się artChanged na klient, do którego możesz się połączyć i dodać własną logikę.
Lokalny Skrypt
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
-- Pokaż trochę błysków przez 3 sekundy
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
Referencja API
Typy
Przedmioty artystyczne powierzchni
Obrazy do użycia jako sztuka na płótnie są przedstawione przez tabelę z dwoma wartościami.
Klucz | Opis |
---|---|
name | nazwa wyświetlanametadanych. |
assetId | Idź ID obrazu dołączonego. |
Funkcje
konfigurować
Przywraca domyślne opcje konfiguracji poprzez następujące klucze/wartości w tabeli config. Ta funkcja może być wywołana tylko z Script .
Klucz | Opis | Domyślny |
---|---|---|
enabled | Włącza lub wyłączonefunkcjonalność modułu. | prawdziwy |
assets | Lista typów powierzchni artystycznych. | (zobacz kod poniżej) |
quotaPerPlayer | Maksymalna liczba części sztuki, które może postawić każdy gracz. | 2 |
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
dostaćCanvases
Powoduje powrót wszystkich kanw z oznaczeniem tagiem SurfaceCanvas .
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
placeArt
Umieszcza programy sztuki użytkowej na rzecz gracza. Zauważ, że obiekt canvas musi być oznaczony tagiem SurfaceCanvas przy inicjalizacji serwera. Rekomendujemy używanie tego tylko z płóciem zwróconym z getCanvases.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Umieść nagrodę Bloxy z zasobów sztuki domowej na pierwszej płótnie
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)
usuń wszystkie artykuły
Usuwa wszystkie prace z wszystkich powierzchni.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Wydarzenia
artZmieniony
Wystąpi, gdy dzieło sztuki zostanie zmienione w szczególnej lokalizacji na płótnie. Gdy dzieło sztuki zostanie usunięte, artId będzie nil . Uwaga, że wartość Vector3 przekazywana jest jako trzeci param
Parametry | |
---|---|
canvas: BasePart | Płótno, na którym zmieniono pracę. |
miejsce: Frame | Wewnętrzny Frame , który zawiera dzieło sztuki ImageLabel . |
位置: Vector3 | Dokładna pozycja, w której umieszczono pracę. |
artId: string | Identyfikator zasobu nowego dzieła sztuki. |
OwnerUID: number | UserId gracza, który umieścił pracę. |
Lokalny Skrypt
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)
pokaż
Występuje, gdy pojawi się komunikat interakcji płótna graczy. Połączona funkcja otrzymuje płótno, na którym znajduje się prośba. Ten wydarzenie może być połączony tylko w LocalScript .
Parametry | |
---|---|
canvas: BasePart | Płótno, na którym wyświetlana jest wiadomość. |
Lokalny Skrypt
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)
ukrytyInteraktor
Występuje, gdy zapis interakcji z płytą jest ukryty. Połączona funkcja otrzymuje płytę, na której znajduje się zapis. Ten wydarzenie może być połączony tylko w LocalScript .
Parametry | |
---|---|
canvas: BasePart | Płótno, na którym wyświetlano prośbę. |
Lokalny Skrypt
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)
wybrane
Występuje, gdy interfejs wyboru sztuki powierzchniowej jest pokazany graczowi. Ten wydarzenie może być połączony tylko w LocalScript .
Lokalny Skrypt
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)
ulatorHidden
Wystąpi, gdy interfejs wyboru sztuki powierzchniowej dla gracza jest ukryty. Ten wątek może być połączony tylko w LocalScript .
Lokalny Skrypt
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)