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

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

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

  3. Temukan dan klik Modul Dev ubin.

  4. Lokasi modul Seni Permukaan dan klik, atau seret-seret ke dalam tampilan 3D.

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

  1. Lokasi SurfaceCanvas meshes di dalam Folder Pekerjaan di mana modul utama.

  2. Pindahkan ke tingkat tertinggi Workspace hierarki dan posisikan di mana diinginkan.

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

  1. Pilih SurfaceCanvas mesh.

  2. Pada bagian bawah dari jendela Proprietas , temukan属性 SurfaceCanvasFace dengan nilai default sebagai Kanan .

  3. Klik属性 dan enter satu dari enam nilai yang menggambarkan Enum.NormalId .

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.

KunciDeskripsi
namenama displaymetrik.
assetIdID aset gambar untuk dimasukkan.

Fungsi

mengonfigurasi

mengonfigurasi(config: table )

Menggeser opsi konfigurasi default melalui kunci/值 berikut ini dalam tabel config . Fungsi ini hanya dapat dipanggil dari Script .

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

mendapatkan Canvas: table

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

placeArt(pemain: Player, canvas: BasePart )

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

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

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: BasePartDapatvas 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: BasePartDapatvas 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)