Pemain sering menikmati merasa seperti mereka adalah bagian dari membangun ruang di mana mereka berada.The SurfaceArt modul pengembang membiarkan pemain secara harfiah meninggalkan tanda mereka dalam pengalaman.
Penggunaan Modul
Instalasi
Untuk menggunakan modul SurfaceArt dalam pengalaman:
Pastikan pengurutan Model dipilih, lalu klik tombol Lihat Semua untuk Kategori .
Temukan dan klik ubin Modul Pengembang .
Temukan modul Seni Permukaan dan klik, atau seret dan lepaskan ke dalam tampilan 3D.
Di jendela Explorer, pindahkan seluruh model SurfaceArt ke ServerScriptService .Setelah menjalankan pengalaman, modul akan didistribusikan ke berbagai layanan dan mulai berjalan.
Mengidentifikasi Kanvas
Modul ini hadir dengan satu model SurfaceCanvas yang dapat Anda posisikan di dunia 3D.Model ini adalah apa yang akan diinteraksi pemain untuk menempatkan seni di permukaannya.
Temukan mesh SurfaceCanvas di dalam folder Workspace dari folder utama modul.
Pindahkan ke hierarki tingkat atas Ruang kerja dan letakkan di tempat yang diinginkan.
Setelah mempublikasikan/menjalankan sesi tes, pemain akan dapat berinteraksi dengan objek melalui ProximityPrompt dan menempatkan seni di permukaan yang didefinisikan.
Mengubah Wajah Kanvas
Di bawah kap, modul menggunakan SurfaceGui untuk menampilkan item seni. Untuk mengonfigurasi permukaan mana seni muncul:
Pilih mesh SurfaceCanvas .
Di bagian bawah jendela Properti , temukan atribut SurfaceCanvasFace dengan nilai default Kanan .
Klik atribut dan masukkan salah satu dari enam nilai yang menggambarkan Enum.NormalId.
Nilai Atribut | ID Normal yang Sesuai |
---|---|
Depan | Enum.NormalId.Front |
Kembali | Enum.NormalId.Back |
Tepat | Enum.NormalId.Right |
Terpisah | Enum.NormalId.Left |
Atas | Enum.NormalId.Top |
Bawah | Enum.NormalId.Bottom |
Menggunakan Aset Seni Kustom
Untuk lebih sesuai dengan tema pengalaman Anda, Anda dapat menggunakan kumpulan aset khusus Anda sendiri alih-alih default.Ini dapat dilakukan melalui fungsi konfigurasi , yang dipanggil dari Script di ServerScriptService .
Skrip
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,})
Menghapus Semua Kanvas
Untuk menghapus semua seni yang ada dari semua kanvas di dunia, panggil fungsi removeAllArt dari Script.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Menampilkan Efek Kustom
Mungkin ada kasus di mana Anda ingin menyertakan efek visual tambahan saat karya seni ditempatkan.Modul ini mengekspos peristiwa yang disebut artChanged pada klien yang dapat Andahubungkan dan tambahkan logika Anda sendiri.
Skrip Lokal
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
-- Tampilkan kilauan selama 3 detik
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
Referensi API
Jenis
Aset Seni Permukaan
Gambar yang akan digunakan sebagai seni untuk kanvas diwakili oleh tabel dengan dua nilai.
Kunci | Deskripsi |
---|---|
name | nama displaymetadata. |
assetId | ID aset dari gambar untuk dimasukkan. |
Fungsi
mengonfigurasi
mengonfigurasi(config: table )
Menggantikan opsi konfigurasi default melalui kunci/nilai berikut di tabel config.Fungsi ini hanya dapat dipanggil dari Script .
Kunci | Deskripsi | Standar |
---|---|---|
enabled | Mengaktifkan atau menonaktifkan fungsionalitas modul di atau mati. | benar |
assets | Daftar SurfaceArtAsset jenis. | (lihat kode di bawah) |
quotaPerPlayer | Jumlah maksimum karya seni yang dapat ditempatkan oleh setiap pemain. | 2 |
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
dapatkanCanvases
mendapatkanCanvases(): table
Kembalikan semua kanvas yang ditagih dengan tag SurfaceCanvas.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
tempatArt
Tempatkan sebuah program karya seni secara otomatis atas nama pemain.Perhatikan bahwa objek canvas harus diberi label dengan tag SurfaceCanvas saat server diinisialisasi.Disarankan untuk menggunakan ini hanya dengan kanvas yang dikembalikan dari getCanvases.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("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)
menghapusSemuaArt
menghapusSemuaArt()
Menghapus semua karya seni dari semua permukaan.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Peristiwa
seni berubah
Melepaskan api saat karya seni diubah di lokasi tertentu di kanvas.Ketika sebuah karya seni dihapus, artId akan menjadi nil .Perhatikan bahwa nilai diberikan sebagai parameter ketiga ke penangan acara sehingga Anda dapat menempatkan efek khusus di posisi tepat di mana karya ditempatkan.Acara ini hanya dapat terhubung di LocalScript .
Parameter | |
---|---|
kanvas: BasePart | Kanvas di mana karya seni diubah. |
tempat: Frame | Internal Frame yang berisi karya seni ImageLabel . |
posisi tempat: Vector3 | Posisi tepat di mana karya seni ditempatkan. |
artId: string | ID aset karya seni baru. |
pemilikUsername: number | UserId dari pemain yang menempatkan seni. |
Skrip Lokal
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)
prompt ditampilkan
Memicu ketika perintah interaksi kanvas ditampilkan kepada pemain.Fungsi terhubung menerima kanvas di mana prompt ditampilkan.Acara ini hanya dapat terhubung di LocalScript .
Parameter | |
---|---|
kanvas: BasePart | Kanvas di mana prompt ditampilkan. |
Skrip Lokal
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)
prompt tersembunyi
Melepaskan api saat perintah interaksi kanvas disembunyikan.Fungsi terhubung menerima kanvas di mana prompt ditampilkan.Acara ini hanya dapat terhubung di LocalScript .
Parameter | |
---|---|
kanvas: BasePart | Kanvas di mana prompt ditampilkan. |
Skrip Lokal
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)
pemilih ditampilkan
Memicu ketika UI pemilih seni permukaan ditampilkan kepada pemain. Acara ini hanya dapat terhubung dalam LocalScript .
Skrip Lokal
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)
pemilih Tersembunyi
Memicu ketika UI pemilih seni permukaan tersembunyi untuk pemain. Acara ini hanya dapat terhubung di LocalScript .
Skrip Lokal
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)