فن السطح

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

يستمتع اللاعبون غالبًا بالشعور بأنهم جزء من بناء المكان الذي يتواجدون فيه. يتيح لك نموذج SurfaceArt نموذج المطور ترك علامتك حرفيًا في تجربة ما.

استخدام النموذج

التثبيت

لاستخدام نموذج SurfaceArt في تجربة ما:

  1. من قائمة نافذة في الاستوديو أو من شريط أدوات علامة الرئيسية، افتح صندوق الأدوات وحدد علامة متجر المبدعين.

  2. تأكد من تحديد فرز النماذج، ثم انقر على زر عرض الكل لعلامات الفئات.

  3. حدد موقع وانقر على بلاطة الحزم.

  4. حدد موقع نموذج فن السطح وانقر عليه، أو اسحب وأفلت إلى عرض 3D.

  5. في نافذة المستعرض، انقل النموذج بالكامل SurfaceArt إلى ReplicatedStorage. عند تشغيل التجربة، سيبدأ النموذج في العمل.

وضع القماش

يأتي النموذج مع نموذج SurfaceCanvas واحد يمكنك وضعه في العالم ثلاثي الأبعاد. هذا النموذج هو ما سيتفاعل معه اللاعبون لوضع الفن على سطحه.

  1. حدد موقع شبكة SurfaceCanvas داخل مجلد Workspace الخاص بالمجلد الرئيسي للنموذج.

  2. قم بنقله إلى هيكل Workspace الأعلى وضعه في المكان المرغوب.

  3. عند نشر/تشغيل جلسة اختبار، سيتمكن اللاعبون من التفاعل مع الكائن عبر ProximityPrompt ووضع الفن على السطح المحدد.

تغيير وجه القماش

في الخلفية، يستخدم النموذج SurfaceGui لعرض عناصر الفن. لتكوين أي سطح يظهر الفن عليه:

  1. حدد شبكة SurfaceCanvas.

  2. في الجزء السفلي من نافذة الخصائص، حدد سمة SurfaceCanvasFace مع قيمة افتراضية Right.

  3. انقر على السمة وأدخل واحدة من ست قيم تصف Enum.NormalId.

قيمة السمةمعرف عادي مطابق
أمامEnum.NormalId.Front
خلفEnum.NormalId.Back
يمينEnum.NormalId.Right
يسارEnum.NormalId.Left
أعلىEnum.NormalId.Top
أسفلEnum.NormalId.Bottom

استخدام أصول الفن المخصصة

لتناسب موضوع تجربتك بشكل أفضل، يمكنك استخدام مجموعتك الخاصة من الأصول المخصصة بدلاً من الافتراضات. يمكن القيام بذلك عبر وظيفة تكوين، التي يتم استدعاؤها من Script في ServerScriptService.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local customAssets = {
CustomAsset1 = {
name = "الأصل المخصص 1",
assetId = "rbxassetid://7322508294",
},
CustomAsset2 = {
name = "الأصل المخصص 2",
assetId = "rbxassetid://7322547665",
},
}
SurfaceArt.configure({
assets = customAssets,
})

مسح جميع القماشات

لإزالة كل الفن الحالي من جميع القماشات في العالم، قم باستدعاء وظيفة removeAllArt من Script.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

عرض التأثيرات المخصصة

قد تكون هناك حالات ترغب فيها في تضمين تأثيرات بصرية إضافية عند وضع عمل فني. يكشف هذا النموذج عن حدث يسمى artChanged على العميل الذي يمكنك الاتصال به وإضافة منطقتك الخاصة.

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 ثوانٍ
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

مرجع واجهة برمجة التطبيقات

الأنواع

SurfaceArtAsset

تُستخدم الصور كفن للقماشة من خلال جدول يحتوي على قيمتين.

المفتاحالوصف
nameاسم العرض الوصفي للبيانات الوصفية.
assetIdمعرف الأصول للصورة المراد تضمينها.

الدوال

configure

configure(config: table)

تقوم بتجاوز خيارات التكوين الافتراضية من خلال المفاتيح/القيم التالية في جدول config. لا يمكن استدعاء هذه الوظيفة إلا من Script.

المفتاحالوصفافتراضي
enabledيبدل وظيفة النموذج قيد التشغيل أو الإيقاف.true
assetsقائمة من SurfaceArtAsset الأنواع.(انظر الرمز أدناه)
quotaPerPlayerالعدد الأقصى من قطع الفن التي يمكن لكل لاعب وضعها.2
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.configure({
quotaPerPlayer = 4,
promptKeyCode = Enum.KeyCode.T,
promptMaxActivationDistance = 8,
})

getCanvases

getCanvases(): table

يعيد جميع القماشات الموسومة بعلامة SurfaceCanvas.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local canvases = SurfaceArt.getCanvases()

placeArt

placeArt(player: Player, canvas: BasePart)

يضع قطعة فنية برمجيًا نيابة عن لاعب. لاحظ أن كائن canvas يجب أن يكون موسومًا بعلامة SurfaceCanvas عند تهيئة الخادم. من المستحسن استخدام هذا فقط مع قماشة تم إرجاعها من getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- ضع جائزة Bloxy من الأصول الفنية الافتراضية في أول قماشة
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

يتم إزالة جميع الأعمال الفنية من جميع الأسطح.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

الأحداث

artChanged

ينطلق عندما يتم تغيير عمل فني في موقع معين على قماشة. عند إزالة عمل فني، ستكون artId هي nil. لاحظ أنه يتم تمرير قيمة Vector3 كمعامل ثالث إلى معالج الحدث حتى تتمكن من وضع تأثير مخصص في الموقع الدقيق حيث تم وضع العمل الفني. يمكن توصيل هذا الحدث فقط في LocalScript.

المعلمات
canvas: BasePartالقماش الذي تم تغيير العمل الفني عليه.
spot: Frameالإطار الداخلي Frame الذي يحتوي على ImageLabel للعمل الفني.
spotPosition: Vector3الموقع الدقيق حيث تم وضع العمل الفني.
artId: stringمعرف الأصول للعمل الفني الجديد.
ownerUserId: numberUserId للاعب الذي وضع الفن.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("الفن الموضوع في:", spotPosition)
print("معرف أصول الفن:", artId)
print("الفن الموضوع بواسطة:", ownerId)
end)

promptShown

ينطلق عندما يتم عرض مطلوبة تفاعل القماش للاعب. تستقبل الوظيفة المتصلة القماش الذي يظهر عليه المطالبة. يمكن توصيل هذا الحدث فقط في LocalScript.

المعلمات
canvas: BasePartالقماش الذي يتم عرض المطالبة عليه.
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

ينطلق عندما يتم إخفاء مطلوبة تفاعل القماش. تستقبل الوظيفة المتصلة القماش الذي كانت المطالبة تعرضه. يمكن توصيل هذا الحدث فقط في LocalScript.

المعلمات
canvas: BasePartالقماش الذي كانت المطالبة تعرضه.
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

ينطلق عندما يتم عرض واجهة مستخدم محدد فن السطح للاعب. يمكن توصيل هذا الحدث فقط في LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "فتح محدد فن السطح")
end)

selectorHidden

ينطلق عندما يتم إخفاء واجهة مستخدم محدد فن السطح للاعب. يمكن توصيل هذا الحدث فقط في LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "أغلق محدد فن السطح")
end)
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.