งานศิลป์พื้นผิว

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

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

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

การติดตั้ง

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

  1. จากแท็บ ดู เปิด กล่องเครื่องมือ และเลือกแท็บ ร้านค้าผู้สร้าง

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

  3. ค้นหาและคลิกที่แท็บ โมดูลพัฒนา

  4. ค้นหาโมดูล งานศิลป์พื้นผิว และคลิกหรือวางลงในมุมมอง 3D

  5. ในหน้าต่าง สํารวจ ย้ายรูปแบบ SurfaceArt ทั้งหมดไปยัง ServerScriptService เมื่อเรียกใช้ประสบการณ์แล้ว โมดูลจะแจกจ่ายตัวเองไปยังบริการต่างๆ และเริ่มทำงาน

ตำแหน่งบนพื้นที่วาดภาพ

โมดูลมาพร้อมกับโมเดล SurfaceCanvas หนึ่งที่คุณสามารถตำแหน่งในโลก 3D ได้รูปแบบนี้คือสิ่งที่ผู้เล่นจะโต้ตอบเพื่อวางศิลปะบนพื้นผิว

  1. ค้นหาเมทริกซ์ SurfaceCanvas ภายในโฟลเดอร์ พื้นที่ทำงาน ของโฟลเดอร์หลักของโมดูล

  2. ย้ายไปยังชั้นสูงสุดของ พื้นที่ทำงาน และตำแหน่งที่ต้องการ

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

เปลี่ยนใบหน้าบนพื้นผิววาดภาพ

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

  1. เลือกเมทริกซ์ SurfaceCanvas

  2. ที่ด้านล่างของหน้าต่าง คุณสมบัติ ให้ค้นหาคุณสมบัติ SurfaceCanvasFace ด้วยค่าเริ่มต้นของ ขวา

  3. คลิกที่คุณสมบัติและใส่หนึ่งในหกค่าที่อธิบาย Enum.NormalId

ค่าคุณสมบัติID ปกติที่ตรงกัน
ด้านหน้า Enum.NormalId.Front
กลับ Enum.NormalId.Back
ขวา Enum.NormalId.Right
ซ้าย Enum.NormalId.Left
ด้านบน Enum.NormalId.Top
ด้านล่าง Enum.NormalId.Bottom

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

เพื่อให้เหมาะกับธีมของประสบการณ์ของคุณมากขึ้น คุณสามารถใช้ชุดทรัพยากรที่กำหนดเองของคุณแทนที่จะเป็นค่าเริ่มต้นสามารถทำได้โดยใช้ฟังก์ชัน configure ซึ่งเรียกจาก Script ใน ServerScriptService

สคริปต์

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,
})

ล้างแคนวาสทั้งหมด

เพื่อลบงานศิลปะทั้งหมดที่มีอยู่จากทุกแคนวาสทั่วโลก โทรใช้ฟังก์ชัน removeAllArt จาก Script

สคริปต์

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

แสดงเอฟเฟกต์ที่กําหนดเอง

อาจมีกรณีที่คุณต้องการรวมเอฟเฟกต์ภาพเพิ่มเติมเมื่อวางผลงานศิลปะโมดูลนี้เปิดเผยเหตุการณ์ที่เรียกว่า artChanged บนไคลเอนต์ที่คุณสามารถเชื่อมต่อและเพิ่มโลจิสติกของคุณเองได้

สคริปท์ท้องถิ่น

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
-- แสดงประกายไฟเป็นเวลา 3 วินาที
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

คู่มือ เอกสารอ้างอิงเกี่ยวกับ API

ประเภท

สินทรัพย์ SurfaceArt

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

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

ฟังก์ชัน

กำหนดค่า

กำหนดค่า (config: table )

ยกเลิกตัวเลือกการกำหนดค่าเริ่มต้นผ่านตัวแปรหรือค่าต่อไปนี้ในตาราง config ด้วยคีย์/ค่าฟังก์ชันนี้สามารถโทรได้เฉพาะจาก Script

กุญแจคําอธิบายค่าเริ่มต้น
enabledสลับฟังก์ชันของโมดูลเปิดหรือปิดจริง
assetsรายการของ SurfaceArtAsset ประเภท(ดูรหัสด้านล่าง)
quotaPerPlayerจํานวนชิ้นงานศิลปะสูงสุดที่ผู้เล่นแต่ละคนสามารถวางได้2
สคริปต์

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

รับภาพวาด

รับภาพวาด:: table

คืนค่าทั้งหมดของแคนวาสที่มีแท็ก SurfaceCanvas แท็ก

สคริปต์

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

สถานที่Art

สถานที่Art(ผู้เล่น: Player , ภาพวาด: BasePart )

วางโปรแกรมชิ้นงานศิลปะโดยอัตโนมัติในนามของผู้เล่นโปรดทราบว่าวัตถุ canvas จะต้องมีแท็ก SurfaceCanvas เมื่อเซิร์ฟเวอร์ถูกเริ่มต้นขอแนะนำให้ใช้เฉพาะกับแคนวาสที่ส่งคืนจาก getCanvases เท่านั้น

สคริปต์

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- วางรางวัล Bloxy จากทรัพยากรศิลปะเริ่มต้นไปยังภาพวาดแรก
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

ลบทั้งหมดArt

ลบทั้งหมดArt()

ลบงานศิลปะทั้งหมดจากทุกพื้นผิว

สคริปต์

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

อีเวนต์

เปลี่ยนศิลปะ

เกิดไฟไหม้เมื่องานศิลปะถูกเปลี่ยนแปลงที่ตำแหน่งเฉพาะบนพื้นผิววาดรูปเมื่องานศิลปะถูกลบออก artId จะเป็น nilโปรดทราบว่ามีการส่งค่า เป็นพารามิเตอร์ที่สามให้กับตัวจัดการเหตุการณ์เพื่อให้คุณสามารถตำแหน่งเอฟเฟกต์ที่กําหนดเองได้ที่ตําแหน่งที่แน่นอนที่งานศิลปะถูกวางไว้อีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน LocalScript

พารามิเตร
พื้นผิว: BasePartพื้นที่วาดรูปที่งานศิลปะถูกเปลี่ยนแปลง
จุด: Frameภายใน Frame ที่มีผลงานศิลปะ ImageLabel
ตําแหน่งจุด: Vector3ตำแหน่งที่แน่นอนที่งานศิลปะถูกวางไว้
artId: stringID สินทรัพย์ของงานศิลปะใหม่
เจ้าของ userId: numberUserId ของผู้เล่นที่วางงานศิลปะ
สคริปท์ท้องถิ่น

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)

แสดงทันที

เกิดไฟไหม้เมื่อมีการแสดงคำถามการโต้ตอบบนพื้นที่วาดภาพให้กับผู้เล่นฟังก์ชันที่เชื่อมต่อได้รับพื้นที่วาดภาพที่การแจ้งเตือนกำลังแสดงอยู่อีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน LocalScript

พารามิเตร
พื้นผิว: BasePartพื้นที่วาดรูปที่กล่องโต้ตอบกำลังแสดงอยู่
สคริปท์ท้องถิ่น

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)

แจ้งเตือนซ่อน

เกิดไฟไหม้เมื่อแอปพลิเคชันการโต้ตอบบนพื้นที่วาดภาพถูกซ่อนฟังก์ชันที่เชื่อมต่อได้รับพื้นที่วาดภาพที่กล่องโต้ตอบแสดงขึ้นอีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน LocalScript

พารามิเตร
พื้นผิว: BasePartพื้นที่วาดรูปที่การแจ้งเตือนถูกแสดงบน
สคริปท์ท้องถิ่น

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)

ตัวเลือกที่แสดง

จะเกิดไฟไหม้เมื่อ UI ตัวเลือกงานพื้นผิวถูกแสดงให้กับผู้เล่น อีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน LocalScript

สคริปท์ท้องถิ่น

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)

ตัวเลือกที่ซ่อน

จะเกิดไฟไหม้เมื่อตัวเลือกผลงานพื้นผิวสำหรับผู้เล่นถูกซ่อน อีเวนต์นี้สามารถเชื่อมต่อได้เฉพาะใน LocalScript

สคริปท์ท้องถิ่น

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)