Sztuka powierzchniowa

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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:

  1. Z zakładki Widok, otwórz Pudełko z narzędziami i wybierz zakładkę Sklep z twórcami .

    Toolbox toggle button in Studio
  2. Upewnij się, że wybrano sortowanie modele , a następnie kliknij przycisk Zobacz wszystko dla kategorii .

  3. Zlokalizuj i kliknij pasek modułów rozwojowych .

  4. Zlokalizuj moduł Sztuka powierzchniowa i kliknij go, lub przeciągnij i upuść do widoku 3D.

  5. 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.

  1. Zlokalizuj siatkę Płaszczyzna obrazu w środku katalogu Przestrzeń robocza modułu głównego katalogu.

  2. Przenieś ją do hierarchii najwyższego poziomu Przestrzeni roboczej i umieść ją tam, gdzie chcesz.

  3. 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:

  1. Wybierz siatkę Płaszczyzna obrazu .

  2. Na dole okna Właściwości , znajdź atrybut PowierzchniaPłótnaObrazu z domyślną wartością Prawo .

  3. Kliknij atrybut i wprowadź jedną z sześciu wartości, które opisują Enum.NormalId.

Wartość atrybutuOdpowiedni 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.

KluczOpis
namenazwa wyświetlanametadanych.
assetIdID 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.

KluczOpisDomyślny
enabledPrzełącza funkcjonalność modułu na włączone lub wyłączone.prawda
assetsLista typów SurfaceArtAsset.(zobacz kod poniżej)
quotaPerPlayerMaksymalna 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

placeArt(gracz: Player , płótno: BasePart )

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: BasePartPłót, na którym zmieniono dzieło sztuki.
stopień: FrameWewnętrzny Frame zawierający dzieło sztuki ImageLabel .
pozycjaSpot: Vector3Dokładna pozycja, w której umieszczono dzieło sztuki.
artId: stringID zasobu nowego dzieła sztuki.
ownerUserId: numberUserId 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: BasePartPł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: BasePartPł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)