Gracze często lubią czuć się, jakby byli częścią budowy przestrzeni, w której się znajdują.Moduł rozwojowy Powierzchnia sztuki pozwala graczom dosłownie pozostawić swój znak w doświadczeniu.
Użycie modułu
Instalacja
Aby użyć modułu Powierzchnia sztuki w doświadczeniu:
Upewnij się, że wybrano sortowanie modele , a następnie kliknij przycisk Zobacz wszystko dla kategorii .
Zlokalizuj i kliknij pasek modułów rozwojowych .
Zlokalizuj moduł Sztuka powierzchniowa i kliknij go, lub przeciągnij i upuść do widoku 3D.
W oknie Eksploratora przesuń cały model SurfaceArt do ServerScriptService .Po uruchomieniu doświadczenia moduł rozproszy się na różne usługi i rozpocznie działanie.
Pozycjonowanie płótna
Moduł zawiera jeden model Płaszczyzny obrazu , który możesz umieścić w świecie 3D.Ten model jest tym, z czym gracze będą interakcjonować, aby umieścić sztukę na jego powierzchni.
Zlokalizuj siatkę Płaszczyzna obrazu w środku katalogu Przestrzeń robocza modułu głównego katalogu.
Przenieś ją do hierarchii najwyższego poziomu Przestrzeni roboczej i umieść ją tam, gdzie chcesz.
Po opublikowaniu/wykonaniu sesjatestowej gracze będą mogli wchodzić w interakcję z obiektem za pomocą ProximityPrompt i umieszczać sztukę na określonej powierzchni.
Zmiana twarzy płótna
Pod maską moduł używa SurfaceGui , aby wyświetlać przedmioty sztuki. Aby skonfigurować powierzchnię, na której pojawia się sztuka:
Wybierz siatkę Płaszczyzna obrazu .
Na dole okna Właściwości , znajdź atrybut PowierzchniaPłótnaObrazu z domyślną wartością Prawo .
Kliknij atrybut i wprowadź jedną z sześciu wartości, które opisują Enum.NormalId.
Wartość atrybutu | Odpowiedni normalny identyfikator |
---|---|
Pród | Enum.NormalId.Front |
Wróć | Enum.NormalId.Back |
Prawo | Enum.NormalId.Right |
Lewo | Enum.NormalId.Left |
Góra | Enum.NormalId.Top |
Dół | Enum.NormalId.Bottom |
Używanie niestandardowych zasobów artystycznych
Aby lepiej dopasować temat swojego doświadczenia, możesz użyć własnego zestawu niestandardowych zasobów zamiast domyślnych.Można to zrobić za pomocą funkcji konfiguruj, która jest wywoływana 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ąć całe istniejące sztuka z wszystkich płócien na świecie, wezwij funkcję usuń wszystkie sztuki z Script .
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Pokazanie niestandardowych efektów
Może zdarzyć się sytuacja, w której chcesz dodać dodatkowe efekty wizualne, gdy dzieło sztuki zostanie umieszczone.Ten moduł wyświetla wydarzenie o nazwie artChanged na klientzie, 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ż kilka błysków na 3 sekund
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
Referencja API
Typy
PowierzchniaArtAsset
Obrazy, które mają być używane jako sztuka na płót, są reprezentowane przez tabelę z dwoma wartościami.
Klucz | Opis |
---|---|
name | nazwa wyświetlanametadanych. |
assetId | ID zasobu obrazu do włączenia. |
Funkcje
skonfigurować
konfigurować(config: table )
Nadpisanie domyślnych opcji konfiguracyjnych za pomocą następujących kluczy/wartości w tabeli config.Funkcja ta może być wywołana tylko z Script.
Klucz | Opis | Domyślny |
---|---|---|
enabled | Przełącza funkcjonalność modułu na włączone lub wyłączone. | prawda |
assets | Lista typów SurfaceArtAsset. | (zobacz kod poniżej) |
quotaPerPlayer | Maksymalna liczba sztuk sztuki, które mogą być umieszczone przez każdego gracza. | 2 |
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
dostaćPłótny
getCanvases(): table
Zwraca wszystkie płótna oznaczone tagiem SurfaceCanvas.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
miejsceArt
Umieszcza sztukę programatycznie w imieniu gracza.Zauważ, że obiekt canvas musi być oznaczony tagiem SurfaceCanvas podczas inicjalizacji serwera.Zaleca się używanie tego tylko z płótnem 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 domyślnych zasobów sztuki na pierwszej płótnie
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)
usuń wszystkieArty
usuńWszystkoArt()
Usuwa całe dzieło ze wszystkich powierzchni.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Wydarzenia
sztukaZmieniona
Wypala się, gdy dzieło sztuki jest zmieniane w określonej lokalizacji na płótnie.Gdy dzieło zostanie usunięte, artId będzie nil.Zauważ, że wartość Vector3 jest przekazywana jako trzeci parametr do obsługi zdarzenia, abyś mógł umieścić niestandardowy efekt w dokładnej pozycji, w której umieszczono dzieło sztuki.To wydarzenie może być połączone tylko w LocalScript .
Parametry | |
---|---|
płótno: BasePart | Płót, na którym zmieniono dzieło sztuki. |
stopień: Frame | Wewnętrzny Frame zawierający dzieło sztuki ImageLabel . |
pozycjaSpot: Vector3 | Dokładna pozycja, w której umieszczono dzieło sztuki. |
artId: string | ID zasobu nowego dzieła sztuki. |
ownerUserId: number | UserId gracza, który umieścił sztukę. |
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)
promptPokazany
Wybucha, gdy pojawia się monit o interakcję z płótnem u gracza.Połączona funkcja otrzymuje płót, na którym wyświetlany jest monit.To wydarzenie może być połączone tylko w LocalScript.
Parametry | |
---|---|
płótno: BasePart | Płaszcz, na którym wyświetlana jest monitka |
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)
promptHidden
Wystrzeliwuje, gdy okno interakcji płótna jest ukryte.Połączona funkcja otrzymuje płót, na którym wyświetlano monit.To wydarzenie może być połączone tylko w LocalScript.
Parametry | |
---|---|
płótno: BasePart | Płaszcz, na którym pojawiło się okienko |
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)
SelectorWidoczny
Wystrzeliwuje, gdy interfejs wyboru sztuki powierzchni zostanie wyświetlony graczowi. To wydarzenie może być połączone 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)
ukryty wybór
Wystrzeliwuje, gdy interfejs wyboru sztuki powierzchni jest ukryty dla gracza. To wydarzenie może być połączone 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)