Sztuka na Powierzchni

*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ć, że są częścią konstrukcji przestrzeni, w której się znajdują. Moduł SurfaceArt dewelopera pozwala graczom dosłownie zostawić swój ślad w doświadczeniu.

Użycie modułu

Instalacja

Aby użyć modułu SurfaceArt w doświadczeniu:

  1. Z menu Okno w Studio lub paska narzędzi w zakładce Strona Główna, otwórz Toolbox i wybierz zakładkę Sklep Twórcy.

  2. Upewnij się, że wybrano sortowanie po Modelach, a następnie kliknij przycisk Zobacz Wszystko dla Kategorii.

  3. Zlokalizuj i kliknij kafelek Pakiety.

  4. Zlokalizuj moduł Sztuka na Powierzchni i kliknij go, lub przeciągnij go do widoku 3D.

  5. W oknie Eksplorator przesuń cały model SurfaceArt do ReplicatedStorage. Po uruchomieniu doświadczenia moduł zacznie działać.

Pozycjonowanie Płótna

Moduł zawiera wyrób SurfaceCanvas, który możesz umiejscowić w 3D. Model ten jest tym, z czym będą się kontaktować gracze, aby umieszczać sztukę na jego powierzchni.

  1. Zlokalizuj siatkę SurfaceCanvas w folderze Workspace głównego folderu modułu.

  2. Przenieś ją do hierarchii głównej Workspace i umieść w żądanym miejscu.

  3. Po opublikowaniu/uruchomieniu sesji testowej, gracze będą mogli interagować z obiektem za pomocą ProximityPrompt i umieszczać sztukę na zdefiniowanej powierzchni.

Zmienianie Strony Płótna

W tle moduł używa SurfaceGui do wyświetlania elementów sztuki. Aby skonfigurować, na której stronie sztuka się pojawia:

  1. Wybierz siatkę SurfaceCanvas.

  2. Na dole okna Właściwości zlokalizuj atrybut SurfaceCanvasFace z domyślną wartością Right.

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

Używanie Niestandardowych Aspektów Sztuki

Aby lepiej dopasować do tematu twojego doświadczenia, możesz używać własnego zestawu niestandardowych zasobów zamiast domyślnych. Można to zrobić za pomocą funkcji configure, wywoływanej z Script w ServerScriptService.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local customAssets = {
CustomAsset1 = {
name = "Niestandardowy Zasób 1",
assetId = "rbxassetid://7322508294",
},
CustomAsset2 = {
name = "Niestandardowy Zasób 2",
assetId = "rbxassetid://7322547665",
},
}
SurfaceArt.configure({
assets = customAssets,
})

Czyszczenie Wszystkich Płócien

Aby usunąć wszystkie istniejące dzieła sztuki ze wszystkich płócien na świecie, wywołaj funkcję removeAllArt z Script.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

Pokazywanie Niestandardowych Efektów

Mogą być sytuacje, w których chciałbyś dodać dodatkowe efekty wizualne, gdy dzieło sztuki jest umieszczane. Ten moduł udostępnia zdarzenie o nazwie artChanged na kliencie, do którego możesz się podłączyć i dodać swoją logikę.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.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ę iskier przez 3 sekundy
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Referencja API

Typy

SurfaceArtAsset

Obrazy, które będą używane jako sztuka dla płótna, są reprezentowane przez tabelę z dwoma wartościami.

KluczOpis
nameNazwa wyświetlana metadanych.
assetIdID zasobu obrazu do dołączenia.

Funkcje

configure

configure(config: table)

Nadpisuje domyślne opcje konfiguracji przez następujące klucze/wartości w tabeli config. Ta funkcja może być wywoływana tylko z Script.

KluczOpisDomyślna wartość
enabledWłącza lub wyłącza funkcjonalność modułu.true
assetsLista typów SurfaceArtAsset.(zobacz kod poniżej)
quotaPerPlayerMaksymalna liczba dzieł sztuki, które może umieścić każdy gracz.2
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.configure({
quotaPerPlayer = 4,
promptKeyCode = Enum.KeyCode.T,
promptMaxActivationDistance = 8,
})

getCanvases

getCanvases(): table

Zwraca wszystkie płótna oznaczone tagiem SurfaceCanvas.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local canvases = SurfaceArt.getCanvases()

placeArt

placeArt(player: Player, canvas: BasePart)

Umieszcza dzieło sztuki programowo w imieniu gracza. Zauważ, że obiekt canvas musi być oznaczony tagiem SurfaceCanvas, gdy serwer jest uruchamiany. Zaleca się używać tego tylko z płótnem zwróconym z getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Umieść nagrodę Bloxy z domyślnych zasobów sztuki w pierwszym płótnie
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

Usuwa wszystkie dzieła sztuki ze wszystkich powierzchni.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

Zdarzenia

artChanged

Wydarza się, gdy dzieło sztuki zostaje zmienione w danym miejscu na płótnie. Gdy dzieło sztuki jest usuwane, artId będzie nil. Zauważ, że wartość Vector3 jest przekazywana jako trzeci parametr do handlera zdarzeń, aby można było umieścić niestandardowy efekt dokładnie w miejscu, w którym dzieło sztuki zostało umieszczone. To zdarzenie można połączyć tylko w LocalScript.

Parametry
canvas: BasePartPłótno, na którym zostało zmienione dzieło sztuki.
spot: FrameWewnętrzny Frame, który zawiera dzieło sztuki ImageLabel.
spotPosition: Vector3Dokładna pozycja, w której dzieło sztuki zostało umieszczone.
artId: stringID zasobu nowego dzieła sztuki.
ownerUserId: numberUserId gracza, który umieścił sztukę.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Sztuka umieszczona w:", spotPosition)
print("ID zasobu sztuki:", artId)
print("Sztuka umieszczona przez:", ownerId)
end)

promptShown

Wydarza się, gdy podpowiedź interakcji z płótnem jest pokazywana graczowi. Połączona funkcja otrzymuje płótno, na którym podpowiedź się wyświetla. To zdarzenie można połączyć tylko w LocalScript.

Parametry
canvas: BasePartPłótno, na którym podpowiedź jest wyświetlana.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.promptShown:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)

promptHidden

Wydarza się, gdy podpowiedź interakcji z płótnem jest ukrywana. Połączona funkcja otrzymuje płótno, na którym podpowiedź była wyświetlana. To zdarzenie można połączyć tylko w LocalScript.

Parametry
canvas: BasePartPłótno, na którym podpowiedź była wyświetlana.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.promptClosed:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)

selectorShown

Wydarza się, gdy interfejs użytkownika selektora sztuki na powierzchni jest pokazywany graczowi. To zdarzenie można połączyć tylko w LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "otworzył selektor sztuki na powierzchni")
end)

selectorHidden

Wydarza się, gdy interfejs użytkownika selektora sztuki na powierzchni jest ukrywany dla gracza. To zdarzenie można połączyć tylko w LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "zamknął selektor sztuki na powierzchni")
end)
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.