Seni Permukaan

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

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:

  1. Dari tab Pandangan, buka Kotak Alat dan pilih tab Toko Pencipta .

    Toolbox toggle button in Studio
  2. Pastikan pengurutan Model dipilih, lalu klik tombol Lihat Semua untuk Kategori .

  3. Temukan dan klik ubin Modul Pengembang .

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

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

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

  2. Pindahkan ke hierarki tingkat atas Ruang kerja dan letakkan di tempat yang diinginkan.

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

  1. Pilih mesh SurfaceCanvas .

  2. Di bagian bawah jendela Properti , temukan atribut SurfaceCanvasFace dengan nilai default Kanan .

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

Nilai AtributID 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.

KunciDeskripsi
namenama displaymetadata.
assetIdID 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 .

KunciDeskripsiStandar
enabledMengaktifkan atau menonaktifkan fungsionalitas modul di atau mati.benar
assetsDaftar SurfaceArtAsset jenis.(lihat kode di bawah)
quotaPerPlayerJumlah 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

placeArt(pemain: Player , kanvas: BasePart )

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: BasePartKanvas di mana karya seni diubah.
tempat: FrameInternal Frame yang berisi karya seni ImageLabel .
posisi tempat: Vector3Posisi tepat di mana karya seni ditempatkan.
artId: stringID aset karya seni baru.
pemilikUsername: numberUserId 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: BasePartKanvas 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: BasePartKanvas 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)