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 seperti mereka adalah bagian dari konstruksi ruang yang mereka masuki. Modul SurfaceArt pengembang memungkinkan pemain untuk secara harfiah meninggalkan jejak mereka dalam sebuah permainan.

Penggunaan Modul

Instalasi

Untuk menggunakan modul SurfaceArt dalam sebuah permainan:

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

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

  3. Temukan dan klik ubin Packages.

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

  5. Di jendela Explorer, pindahkan seluruh model SurfaceArt ke dalam ReplicatedStorage. Setelah menjalankan permainan, 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 hierarki Workspace tingkat atas dan posisikan di tempat yang diinginkan.

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

Mengubah Sisi Kanvas

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

  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 menggambarkan Enum.NormalId.

Menggunakan Aset Seni Kustom

Untuk lebih sesuai dengan tema permainan Anda, Anda dapat menggunakan set 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 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 saat sebuah karya seni ditempatkan. Modul ini mengekspos sebuah event 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 percikan selama 3 detik
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Referensi API

Tipe

SurfaceArtAsset

Gambar yang digunakan sebagai seni untuk kanvas diwakili oleh sebuah 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 dalam tabel config. Fungsi ini hanya dapat dipanggil dari Script.

KunciDeskripsiDefault
enabledMenyalakan atau mematikan fungsionalitas modul.true
assetsDaftar tipe SurfaceArtAsset.(lihat kode di bawah)
quotaPerPlayerJumlah maksimum 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 ditandai 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 sebuah karya seni secara programatis atas nama seorang pemain. Perhatikan bahwa objek canvas harus ditandai 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()

Events

artChanged

Ditembakkan ketika sebuah karya seni diubah di lokasi tertentu pada kanvas. Ketika sebuah karya seni dihapus, artId akan menjadi nil. Perhatikan bahwa nilai Vector3 diteruskan sebagai parameter ketiga ke handler event sehingga Anda dapat menempatkan efek kustom di posisi tepat di mana karya seni ditempatkan. Event ini hanya dapat disambungkan dalam LocalScript.

Parameter
canvas: BasePartKanvas di mana karya seni diubah.
spot: FrameFrame internal yang berisi ImageLabel karya seni.
spotPosition: Vector3Posisi tepat di mana karya seni ditempatkan.
artId: stringID Aset dari karya seni baru.
ownerUserId: numberUserId 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

Ditembakkan ketika prompt interaksi kanvas ditampilkan kepada pemain. Fungsi yang terhubung menerima kanvas di mana prompt ditampilkan. Event ini hanya dapat disambungkan dalam LocalScript.

Parameter
canvas: BasePartKanvas di mana 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

Ditembakkan ketika prompt interaksi kanvas disembunyikan. Fungsi yang terhubung menerima kanvas di mana prompt ditampilkan. Event ini hanya dapat disambungkan dalam LocalScript.

Parameter
canvas: BasePartKanvas di mana 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

Ditembakkan ketika UI pemilih seni permukaan ditampilkan kepada pemain. Event ini hanya dapat disambungkan 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

Ditembakkan ketika UI pemilih seni permukaan disembunyikan untuk pemain. Event ini hanya dapat disambungkan 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.