Oyuncular genellikle bulundukları alanın inşasında bir parça olduklarını hissetmeyi severler. SurfaceArt geliştirici modülü, oyuncuların bir deneyimde gerçekten iz bırakmalarını sağlar.
Modül Kullanımı
Kurulum
SurfaceArt modülünü bir deneyimde kullanmak için:
Studio'nun Pencere menüsünden veya Ana Sayfa sekmesi araç çubuğundan Araç Kutusunu açın ve Yaratıcı Dükkân sekmesini seçin.

Modeller sıralamasının seçili olduğundan emin olun, ardından Kategorileri Gör All butonuna tıklayın.

Paketler kutucuklarını bulun ve tıklayın.
Yüzey Sanatı modülünü bulun ve üzerine tıklayın ya da 3D görünümüne sürükleyip bırakın.

Explorer penceresinde, tüm SurfaceArt modelini ReplicatedStorage içine taşıyın. Deneyimi çalıştırdığınızda, modül çalışmaya başlayacaktır.
Tuvali Konumlandırma
Modül, 3D dünyada konumlandırabileceğiniz bir SurfaceCanvas modeli ile birlikte gelir. Bu model, oyuncuların sanat yerleştirdiği yüzeydir.
Modülün ana klasöründeki Workspace klasöründe SurfaceCanvas modelini bulun.

Üst seviye Workspace hiyerarşisine taşımak ve istenilen yere yerleştirmek için taşıyın.

Bir test oturumu yayımladığınızda/çalıştırdığınızda, oyuncular ProximityPrompt aracılığıyla nesneyle etkileşime girebilir ve belirlenen yüzey üzerine sanat yerleştirebilirler.

Tuval Yüzünü Değiştirme
Modül, sanat nesnelerini görüntülemek için bir SurfaceGui kullanır. Sanatın hangi yüzeyde görüneceğini ayarlamak için:
SurfaceCanvas modelini seçin.
Özellikler penceresinin en altında, varsayılan değeri Sağ olan SurfaceCanvasFace özelliğini bulun.

Özelliğe tıklayın ve bir Enum.NormalId'yi tanımlayan altı değerden birini girin.
| Özellik Değeri | Karşılık Gelen Normal ID |
|---|---|
| Ön | Enum.NormalId.Front |
| Arka | Enum.NormalId.Back |
| Sağ | Enum.NormalId.Right |
| Sol | Enum.NormalId.Left |
| Üst | Enum.NormalId.Top |
| Alt | Enum.NormalId.Bottom |
Özel Sanat Varlıklarını Kullanma
Deneyiminizin temasına daha iyi uyum sağlaması için varsayılanların yerine kendi özel varlık setinizi kullanabilirsiniz. Bu, ServerScriptService içinde bir Script'ten çağrılan konfigürasyon işlevi aracılığıyla yapılabilir.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage.SurfaceArt)local customAssets = {CustomAsset1 = {name = "Özel Varlık 1",assetId = "rbxassetid://7322508294",},CustomAsset2 = {name = "Özel Varlık 2",assetId = "rbxassetid://7322547665",},}SurfaceArt.configure({assets = customAssets,})
Tüm Tuvalleri Temizleme
Dünyadaki tüm tuvallerdeki mevcut sanatı kaldırmak için, bir Script içinde removeAllArt işlevini çağırın.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage.SurfaceArt)SurfaceArt.removeAllArt()
Özel Etkileri Gösterme
Bir sanat eseri yerleştirildiğinde ek görsel efektler eklemek isteyebilirsiniz. Bu modül, bağlayabileceğiniz ve kendi mantığınızı ekleyebileceğiniz artChanged adlı bir olayı istemci üzerinde açığa çıkarır.
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
-- 3 saniyeliğine bazı parıltılar göster
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)
API Referansı
Türler
SurfaceArtAsset
Tuvalde sanat olarak kullanılacak resimler, iki değer içeren bir tablo ile temsil edilir.
| Anahtar | Açıklama |
|---|---|
| name | Meta veri görüntü adı. |
| assetId | Dahil edilecek resmin varlık kimliği. |
İşlevler
configure
configure(config: table)
config tablosundaki aşağıdaki anahtar/değerler aracılığıyla varsayılan yapılandırma seçeneklerini geçersiz kılar. Bu işlev yalnızca bir Script içinden çağrılabilir.
| Key | Açıklama | Varsayılan |
|---|---|---|
| enabled | Modülün işlevselliğini açıp kapatır. | true |
| assets | SurfaceArtAsset türlerinin listesi. | (aşağıdaki koda bakın) |
| quotaPerPlayer | Her oyuncunun yerleştirebileceği maksimum sanat parça sayısı. | 2 |
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage.SurfaceArt)SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
getCanvases
getCanvases(): table
SurfaceCanvas etiketiyle etiketlenmiş tüm tuval sonuçlarını döndürür.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage.SurfaceArt)local canvases = SurfaceArt.getCanvases()
placeArt
Bir sanat parçasını bir oyuncu adına programatik olarak yerleştirir. canvas nesnesinin sunucu başlatıldığında SurfaceCanvas etiketiyle etiketlenmiş olması gerektiğini unutmayın. Bunu yalnızca getCanvases metodundan dönen bir tuvali kullanarak yapmanız önerilir.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Varsayılan sanat varlıklarından Bloxy Award'ı ilk tuvale yerleştir
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)
removeAllArt
removeAllArt()
Tüm yüzeylerden tüm sanat eserlerini kaldırır.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage.SurfaceArt)SurfaceArt.removeAllArt()
Olaylar
artChanged
Bir tuvalde belirli bir konumdaki sanat eseri değiştiğinde tetiklenir. Bir sanat eseri kaldırıldığında, artId nil olacaktır. Olay işleyicisine üçüncü parametre olarak bir Vector3 değeri geçtiği için, sanatı yerleştirilen tam noktada bir özel efekt konumlandırabilirsiniz. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
| Parametreler | |
|---|---|
| canvas: BasePart | Sanat eserinin değiştirildiği tuval. |
| spot: Frame | Sanat eserini içeren içsel Frame. |
| spotPosition: Vector3 | Sanat eserinin yerleştirildiği tam konum. |
| artId: string | Yeni sanat eserinin varlık kimliği. |
| ownerUserId: number | Sanatı yerleştiren oyuncunun UserId. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Sanat burada yerleştirildi:", spotPosition)
print("Sanat varlık kimliği:", artId)
print("Sanatı yerleştiren:", ownerId)
end)
promptShown
Bir tuval etkileşim istemcisi bir oyuncuya gösterildiğinde tetiklenir. Bağlı işlev, uyarıların gösterildiği tuvali alır. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
| Parametreler | |
|---|---|
| canvas: BasePart | Uyarıların gösterildiği tuval. |
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
Bir tuval etkileşim istemcisi gizlendiğinde tetiklenir. Bağlı işlev, uyarıların gösterildiği tuvali alır. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
| Parametreler | |
|---|---|
| canvas: BasePart | Uyarıların gösterildiği tuval. |
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
Yüzey sanatı seçici kullanıcı arayüzü bir oyuncuya gösterildiğinde tetiklenir. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "yüzey sanatı seçicisini açtı")
end)
selectorHidden
Yüzey sanatı seçici kullanıcı arayüzü bir oyuncuda gizlendiğinde tetiklenir. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "yüzey sanatı seçicisini kapattı")
end)