Seni Permukaan

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Pemain sering kali menikmati merasa bahwa mereka adalah bagian dari pembangunan ruang yang mereka masuki. Modul SurfaceArt pengembang memungkinkan pemain meninggalkan jejak mereka di dalam pengalaman.

Penggunaan Modul

Instalasi

Untuk menggunakan modul SurfaceArt dalam sebuah pengalaman:

  1. Dari menu Window Studio atau toolbar tab Home, buka Toolbox dan pilih tab Creator Store.

  2. Pastikan pemfilteran Models dipilih, lalu klik tombol See All untuk Categories.

  3. Temukan dan klik ubin Packages.

  4. Temukan modul Seni Permukaan dan kliknya, atau seret-dan-lepas ke dalam tampilan 3D.

  5. Di jendela Explorer, pindahkan seluruh model SurfaceArt ke ReplicatedStorage. Saat pengalaman dijalankan, modul akan mulai berjalan.

Memposisikan Kanvas

Modul ini dilengkapi dengan satu model SurfaceCanvas yang dapat Anda posisikan di dunia 3D. Model ini adalah yang akan berinteraksi dengan pemain untuk menempatkan seni di permukaannya.

  1. Temukan mesh SurfaceCanvas di dalam folder Workspace dari folder utama modul.

  2. Pindahkan ke hirarki Workspace tingkat atas dan posisikan di tempat yang diinginkan.

  3. Setelah menerbitkan/melakukan sesi pengujian, pemain akan dapat berinteraksi dengan objek melalui ProximityPrompt dan menempatkan seni di permukaan yang telah ditentukan.

Mengubah Wajah Kanvas

Di balik layar, modul ini menggunakan SurfaceGui untuk menampilkan item seni. Untuk mengonfigurasi permukaan mana yang akan muncul seni:

  1. Pilih mesh SurfaceCanvas.

  2. Di bagian bawah jendela Properties, temukan atribut SurfaceCanvasFace dengan nilai default Right.

  3. Klik atribut dan masukkan salah satu dari enam nilai yang mendeskripsikan Enum.NormalId.

Menggunakan Aset Seni Kustom

Untuk lebih mencocokkan tema pengalaman Anda, Anda dapat menggunakan kumpulan aset kustom Anda sendiri alih-alih yang default. Ini dapat dilakukan melalui fungsi configure, yang dipanggil dari Script di ServerScriptService.

Script

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

Menghapus Semua Kanvas

Untuk menghapus semua karya seni yang ada dari semua kanvas di dunia, panggil fungsi removeAllArt dari Script.

Script

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

Menampilkan Efek Kustom

Mungkin ada kasus di mana Anda ingin menyertakan efek visual tambahan ketika sebuah karya seni ditempatkan. Modul ini mengekspos sebuah acara yang disebut artChanged di klien yang dapat Anda sambungkan dan tambahkan logika Anda sendiri.

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
-- Tampilkan beberapa kilauan selama 3 detik
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Referensi API

Jenis

SurfaceArtAsset

Gambar yang digunakan sebagai seni untuk kanvas diwakili oleh tabel dengan dua nilai.

KunciDeskripsi
nameNama tampilan metadata.
assetIdID Aset dari gambar yang akan disertakan.

Fungsi

configure

configure(config: table)

Mengganti opsi konfigurasi default melalui kunci/nilai berikut di tabel config. Fungsi ini hanya dapat dipanggil dari Script.

KunciDeskripsiDefault
enabledMengaktifkan atau menonaktifkan fungsionalitas modul.true
assetsDaftar jenis SurfaceArtAsset.(lihat kode di bawah)
quotaPerPlayerJumlah maksimal karya seni yang dapat ditempatkan oleh setiap pemain.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

Mengembalikan semua kanvas yang diberi tag dengan tag SurfaceCanvas.

Script

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

placeArt

placeArt(player: Player, canvas: BasePart)

Menempatkan satu karya seni secara programatik atas nama seorang pemain. Perhatikan bahwa objek canvas harus diberi tag dengan tag SurfaceCanvas saat server diinisialisasi. Disarankan untuk menggunakan ini hanya dengan kanvas yang dikembalikan dari getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Tempatkan Penghargaan Bloxy dari aset seni default ke kanvas pertama
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

Menghapus semua karya seni dari semua permukaan.

Script

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

Acara

artChanged

Ditembak saat sebuah karya seni diubah pada lokasi tertentu di kanvas. Ketika sebuah karya seni dihapus, artId akan nil. Perhatikan bahwa nilai Vector3 diteruskan sebagai parameter ketiga ke handler acara sehingga Anda dapat menempatkan efek kustom di posisi tepat di mana karya seni tersebut ditempatkan. Acara ini hanya dapat dihubungkan di dalam LocalScript.

Parameter
canvas: BasePartKanvas tempat karya seni diubah.
spot: FrameInternal Frame yang berisi ImageLabel karya seni.
spotPosition: Vector3Posisi tepat di mana karya seni ditempatkan.
artId: stringID Aset dari karya seni baru.
ownerUserId: numberID Pengguna dari pemain yang menempatkan seni.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Seni ditempatkan di:", spotPosition)
print("ID aset seni:", artId)
print("Seni ditempatkan oleh:", ownerId)
end)

promptShown

Ditembak saat prompt interaksi kanvas ditampilkan kepada pemain. Fungsi yang terhubung menerima kanvas tempat prompt ditampilkan. Acara ini hanya dapat dihubungkan di dalam LocalScript.

Parameter
canvas: BasePartKanvas tempat prompt ditampilkan.
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

Ditembak saat prompt interaksi kanvas disembunyikan. Fungsi yang terhubung menerima kanvas tempat prompt ditampilkan. Acara ini hanya dapat dihubungkan di dalam LocalScript.

Parameter
canvas: BasePartKanvas tempat prompt ditampilkan.
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

Ditembak saat UI pemilih seni permukaan ditampilkan kepada pemain. Acara ini hanya dapat dihubungkan di dalam LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "membuka pemilih seni permukaan")
end)

selectorHidden

Ditembak saat UI pemilih seni permukaan disembunyikan untuk pemain. Acara ini hanya dapat dihubungkan di dalam LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "menutup pemilih seni permukaan")
end)
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.