Sztuka 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ą 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:

  1. Z zakładki Zobacz, otwórz Skrzynię narzędzi i wybierz Sklep z twórcami.

    Toolbox toggle button in Studio
  2. Upewnij się, że Modele sortowanie jest zaznaczone, a następnie kliknij przycisk Zobacz wszystko dla Kategorie.

  3. Lokalizuj i klikaj na płytę Moduły Rozwoju .

  4. Lokalizuj moduł Sztuka powierzchni i kliknij go lub przeciągnij go do 3D.

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

  1. Lokalizuj Powierzchnię Canvas mesz w Workspace dyrektorze głównej katalogu modułu.

  2. Przenieś go do najwyższego poziomu hierarchii Workspace i umieść go tam, gdzie chcesz.

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

  1. Wybierz Powierzchnię Canvas mesz.

  2. W dalszej części okna Właściwości, znajdź atrybut Powierzchnia Canvas z domyślną wartością Prawo.

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

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

KluczOpis
namenazwa wyświetlanametadanych.
assetIdIdź ID obrazu dołączonego.

Funkcje

konfigurować

konfigurować(config: table )

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 .

KluczOpisDomyślny
enabledWłącza lub wyłączonefunkcjonalność modułu.prawdziwy
assetsLista typów powierzchni artystycznych.(zobacz kod poniżej)
quotaPerPlayerMaksymalna 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

dostaćPłótna>: table

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

placeArt(gracz: Player , canvas: BasePart )

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

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: BasePartPłótno, na którym zmieniono pracę.
miejsce: FrameWewnętrzny Frame , który zawiera dzieło sztuki ImageLabel .
位置: Vector3Dokładna pozycja, w której umieszczono pracę.
artId: stringIdentyfikator zasobu nowego dzieła sztuki.
OwnerUID: numberUserId 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: BasePartPłó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: BasePartPłó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)