ศิลปะพื้นผิว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ผู้เล่นมักจะรู้สึกสนุกที่ได้เป็นส่วนหนึ่งในการสร้างพื้นที่ที่พวกเขาอยู่ โมดูล SurfaceArt โมดูลสำหรับนักพัฒนา ช่วยให้ผู้เล่นสามารถทิ้งร่องรอยไว้ในประสบการณ์ได้จริงๆ

การใช้งานโมดูล

การติดตั้ง

ในการใช้โมดูล SurfaceArt ในประสบการณ์:

  1. จากเมนู Window ใน Studio หรือแถบเครื่องมือ Home ให้เปิด Toolbox และเลือกแท็บ Creator Store

  2. ตรวจสอบให้แน่ใจว่าได้เลือกการจัดเรียง Models แล้วคลิกปุ่ม ดู ทั้งหมด สำหรับ หมวดหมู่

  3. ค้นหาและคลิกที่แถบ Packages

  4. ค้นหาโมดูล Surface Art และคลิกที่มัน หรือทำการลากและวางมันลงในมุมมอง 3D

  5. ในหน้าต่าง Explorer ให้ย้ายโมเดล SurfaceArt ทั้งหมดไปยัง ReplicatedStorage เมื่อเริ่มรันประสบการณ์ โมดูลจะเริ่มทำงาน

การจัดวางผ้าใบ

โมดูลมาพร้อมกับโมเดล SurfaceCanvas หนึ่งชุดที่คุณสามารถจัดวางในโลก 3D โมเดลนี้คือสิ่งที่ผู้เล่นจะมีปฏิสัมพันธ์ด้วยเพื่อวางศิลปะบนพื้นผิวของมัน

  1. ค้นหาเมช SurfaceCanvas ภายในโฟลเดอร์ Workspace ของโฟลเดอร์หลักของโมดูล

  2. ย้ายมันไปยังลำดับชั้น Workspace ระดับสูงสุดและจัดวางที่ต้องการ

  3. เมื่อเผยแพร่/รันการทดสอบ ผู้เล่นจะสามารถมีปฏิสัมพันธ์กับวัตถุผ่าน ProximityPrompt และวางศิลปะบนพื้นผิวที่กำหนด

การเปลี่ยนพื้นผิวของผ้าใบ

ภายใต้พื้นผิว โมดูลใช้ SurfaceGui เพื่อแสดงไอเท็มศิลปะ เพื่อกำหนดว่าศิลปะจะแสดงที่พื้นผิวใด:

  1. เลือกเมช SurfaceCanvas

  2. ที่ด้านล่างของหน้าต่าง Properties ค้นหาแอตทริบิวต์ SurfaceCanvasFace พร้อมค่าดีฟอลต์คือ Right

  3. คลิกที่แอตทริบิวต์และใส่หนึ่งในค่าหกค่าที่อธิบายถึง Enum.NormalId

ค่าแอตทริบิวต์หมายเลข ID ปกติที่เกี่ยวข้อง
FrontEnum.NormalId.Front
BackEnum.NormalId.Back
RightEnum.NormalId.Right
LeftEnum.NormalId.Left
TopEnum.NormalId.Top
BottomEnum.NormalId.Bottom

การใช้สินทรัพย์ศิลปะที่กำหนดเอง

เพื่อให้เข้ากับธีมของประสบการณ์ของคุณ คุณสามารถใช้ชุดสินทรัพย์ที่กำหนดเองแทนค่าเริ่มต้นได้ สิ่งนี้สามารถทำได้ผ่านฟังก์ชัน configure ที่เรียกจาก 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)

เอกสารอ้างอิง API

ประเภท

SurfaceArtAsset

ภาพที่จะใช้เป็นศิลปะสำหรับผ้าใบถูกแทนด้วยตารางที่มีสองค่า

กุญแจคำอธิบาย
nameชื่อแสดงเมตาดาต้า
assetIdหมายเลข ID ของสินทรัพย์ภาพที่จะรวมไว้

ฟังก์ชัน

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: FrameFrame ภายในที่เก็บงานศิลปะ ImageLabel
spotPosition: Vector3ตำแหน่งที่แน่นอนที่งานศิลปะถูกวางไว้
artId: stringหมายเลข ID ของงานศิลปะใหม่
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("หมายเลข ID ศิลปะ:", 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

เกิดขึ้นเมื่อ UI ตัวเลือกศิลปะพื้นผิวแสดงให้ผู้เล่นเห็น อีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน 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

เกิดขึ้นเมื่อ UI ตัวเลือกศิลปะพื้นผิวถูกซ่อนสำหรับผู้เล่น อีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน 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 และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ