ผู้เล่นมักจะชอบรู้สึกเหมือนเป็นส่วนหนึ่งในการสร้างพื้นที่ที่พวกเขาอยู่ส่วน SurfaceArt โมดูลผู้พัฒนา ช่วยให้ผู้เล่นทิ้งเครื่องหมายในประสบการณ์ได้ตามตัวอักษร
การใช้งานโมดูล
การติดตั้ง
เพื่อใช้โมดูล SurfaceArt ในประสบการณ์:
ตรวจสอบให้แน่ใจว่าการจัดเรียง รูปแบบ ถูกเลือกแล้วคลิกที่ปุ่ม ดูทั้งหมด สำหรับ หมวดหมู่
ค้นหาและคลิกที่แท็บ โมดูลพัฒนา
ค้นหาโมดูล งานศิลป์พื้นผิว และคลิกหรือวางลงในมุมมอง 3D
ในหน้าต่าง สํารวจ ย้ายรูปแบบ SurfaceArt ทั้งหมดไปยัง ServerScriptService เมื่อเรียกใช้ประสบการณ์แล้ว โมดูลจะแจกจ่ายตัวเองไปยังบริการต่างๆ และเริ่มทำงาน
ตำแหน่งบนพื้นที่วาดภาพ
โมดูลมาพร้อมกับโมเดล SurfaceCanvas หนึ่งที่คุณสามารถตำแหน่งในโลก 3D ได้รูปแบบนี้คือสิ่งที่ผู้เล่นจะโต้ตอบเพื่อวางศิลปะบนพื้นผิว
ค้นหาเมทริกซ์ SurfaceCanvas ภายในโฟลเดอร์ พื้นที่ทำงาน ของโฟลเดอร์หลักของโมดูล
ย้ายไปยังชั้นสูงสุดของ พื้นที่ทำงาน และตำแหน่งที่ต้องการ
เมื่อเผยแพร่/ดำเนินการทดสอบเซสชัน ผู้เล่นจะสามารถโต้ตอบกับวัตถุผ่าน ProximityPrompt และวางงานศิลปะบนพื้นที่ที่กำหนดไว้
เปลี่ยนใบหน้าบนพื้นผิววาดภาพ
ภายใต้ฝากระโปรง โมดูลใช้ SurfaceGui เพื่อแสดงรายการงานศิลปะ เพื่อกำหนดพื้นผิวที่งานศิลปะปรากฏ:
เลือกเมทริกซ์ SurfaceCanvas
ที่ด้านล่างของหน้าต่าง คุณสมบัติ ให้ค้นหาคุณสมบัติ SurfaceCanvasFace ด้วยค่าเริ่มต้นของ ขวา
คลิกที่คุณสมบัติและใส่หนึ่งในหกค่าที่อธิบาย 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 | ชื่อการแสดงผลเมทาดาต้า |
assetId | ID สินทรัพย์ของภาพที่จะรวม |
ฟังก์ชัน
กำหนดค่า
กำหนดค่า (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
วางโปรแกรมชิ้นงานศิลปะโดยอัตโนมัติในนามของผู้เล่นโปรดทราบว่าวัตถุ 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: string | ID สินทรัพย์ของงานศิลปะใหม่ |
เจ้าของ userId: number | UserId ของผู้เล่นที่วางงานศิลปะ |
สคริปท์ท้องถิ่น
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)