Pemain sering menikmati merasa seperti mereka adalah bagian dari membangun ruang mereka berada di. The SurfaceArt modul pengembang memungkinkan pemain secara harfiah meninggalkan tanda mereka dalam pengalaman.
Penggunaan Modul
Pemasangan
Untuk menggunakan modul SurfaceArt dalam pengalaman:
Dari tab Lihat, buka tab Kotak Alat dan pilih tab Toko Pencipta .
Pastikan Model penyortiran dipilih, lalu klik tombol Lihat Semua untuk Kategori .
Temukan dan klik Modul Dev ubin.
Lokasi modul Seni Permukaan dan klik, atau seret-seret ke dalam tampilan 3D.
Di jendela Explorer, pindahkan seluruh model SurfaceArt ke ServerScriptService . Setelah mengeksekusi pengalaman, modul akan di distribusikan ke berbagai layanan dan mulai berjalan.
Menempatkan Canvas
Modul ini hadir dengan satu model SurfaceCanvas yang dapat Anda posisikan di dunia 3D. Ini adalah apa yang pemain akan berinteraksi untuk menempatkan seni di permukaannya.
Lokasi SurfaceCanvas meshes di dalam Folder Pekerjaan di mana modul utama.
Pindahkan ke tingkat tertinggi Workspace hierarki dan posisikan di mana diinginkan.
Setelah menerbitkan/meluncurkan sesi tes, pemain akan dapat berinteraksi dengan objek melalui a ProximityPrompt dan menempatkan seni di permukaan yang ditentukan.
Mengubah Wajah Canvas
Di bawah kerudung, modul menggunakan SurfaceGui untuk menampilkan item seni. Untuk mengkonfigurasi permukaan mana yang seni muncul:
Pilih SurfaceCanvas mesh.
Pada bagian bawah dari jendela Proprietas , temukan属性 SurfaceCanvasFace dengan nilai default sebagai Kanan .
Klik属性 dan enter satu dari enam nilai yang menggambarkan Enum.NormalId .
Nilairibut | ID Normal yang sesuai |
---|---|
Depan | Enum.NormalId.Front |
Kembali | Enum.NormalId.Back |
Kanan | Enum.NormalId.Right |
Kiri | Enum.NormalId.Left |
Atas | Enum.NormalId.Top |
Bawah | Enum.NormalId.Bottom |
Menggunakan Sumber Daya Seni Kustom
Untuk lebih baik mengikuti tema pengalaman Anda, Anda dapat menggunakan set khusus aset Anda sendiri alih-alih default. Ini dapat dilakukan melalui fungsi konfigurasikan, yang dianggap dari Class.Script di Script .
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 Class.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 sebuah karya seni ditempatkan. Modul ini mengekspos acara bernama artChanged di klien yang dapat Anda hubungkan 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
-- Tunjukkan beberapa kilauan selama 3 detik
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
Referensi API
Jenis
Aset Art Permukaan
Gambar yang akan digunakan sebagai seni untuk kanvas diwakili oleh tabel dengan dua nilai.
Kunci | Deskripsi |
---|---|
name | nama displaymetrik. |
assetId | ID aset gambar untuk dimasukkan. |
Fungsi
mengonfigurasi
Menggeser opsi konfigurasi default melalui kunci/值 berikut ini dalam tabel config . Fungsi ini hanya dapat dipanggil dari Script .
Kunci | Deskripsi | Standar |
---|---|---|
enabled | Mengubah kemampuan modul on atau mati. | benar |
assets | Daftar SurfaceArtAsset jenis. | (lihat kode di bawah) |
quotaPerPlayer | Jumlah maksimum item 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,})
mendapatkan Canvas
Mengembalikan semua kanvas ditandai dengan tag SurfaceCanvas .
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
Tempat Art
Menyiarkan program lukisan secara otomatis atas nama pemain. Catat bahwa objek canvas harus ditandai dengan label SurfaceCanvas ketika server diinisialisasi. Direkomendasikan 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 dalam kanvas pertama
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)
hapusSemuaArt
Menghapus semua seni dari semua permukaan.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
Acara
artGanti
Mengaktifkan ketika sebuah karya seni diubah di lokasi tertentu di kanvas. Ketika sebuah karya seni dihapus, artId akan menjadi nil . Catat bahwa nilai Vector3 diberikan sebagai parameter ketiga ke p
Parameter | |
---|---|
canvas: BasePart | Kanvas di mana karya seni diubah. |
tempat: Frame | Internal Frame yang berisi karya seni ImageLabel . |
Posisi: Vector3 | Posisi tepat di mana karya seni ditempatkan. |
artId: string | ID aset dari karya baru. |
Owner: 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)
promptTampilan
Diaktifkan ketika prompt interaksi kanvas ditunjukkan kepada pemain. Fungsi terhubung menerima kanvas di mana prompt ditunjukkan. Acara ini hanya dapat dihubungkan dalam LocalScript .
Parameter | |
---|---|
canvas: BasePart | Dapatvas pada mana prompt ditunjukkan. |
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)
promptTersembunyi
Diaktifkan saat prompt interaksi kanvas tersembunyi. Fungsi yang terhubung menerima kanvas di mana prompt ditampilkan. Acara ini hanya dapat dihubungkan dalam LocalScript .
Parameter | |
---|---|
canvas: BasePart | Dapatvas pada 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)
ulator yang ditunjuk
Fire saat UI pemilih seni permukaan ditunjukkan kepada pemain. Acara ini hanya dapat dihubungkan dalam sebuah 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)
hiddenSelector
Fire saat pemilih seni permukaan ditampilkan untuk pemain. Acara ini hanya dapat dihubungkan dalam 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)