ผู้เล่นมักจะชอบที่จะรู้สึกเหมือนเป็นส่วนหนึ่งของการสร้างพื้นที่พวกเขาอยู่ใน ผู้พัฒนา พื้นผิวศิลปะ ให้ผู้เล่นออกจากเครื่องหมายในประสบการณ์
การใช้งานโมดูล
การติดตั้ง
เพื่อใช้ ศิลปะพื้นผิว โมดูลในประสบการณ์:
จากแท็บ ดู เปิด กล่องเครื่องมือ และเลือกแท็บ ร้านค้าผู้สร้าง
ให้แน่ใจว่า รุ่น การเรียงลำดับเลือกแล้วคลิกปุ่ม ดูทั้งหมด สําหรับ หมวดหมู่
ค้นหาและคลิกที่ โมดูลการพัฒนา รายการ
ค้นหาโมดูล ศิลปะพื้นผิว และคลิกหรือลากไปยัง 3D มุมมอง
ใน หน้าต่าง Explorer ให้ย้ายโมเดล SurfaceArt ทั้งหมดไปยัง ServerScriptService เมื่อเรียกใช้ประสบการณ์จะเริ่มต้นดำเนินการโดยหลายบริการและเริ่มดำเนินการ
ตำแหน่งพื้นผิว
โมดูลมีหนึ่ง SurfaceCanvas โมเดลที่คุณสามารถวางในโลก 3D ได้ โมเดลนี้คือสิ่งที่ผู้เล่นจะใช้เพื่อวางศิลปะบนพื้นผิวของมัน
ค้นหา SurfaceCanvas เมชภายใน กล่องงาน ฟอลเดอร์ของโมดูลหลัก
ย้ายมันไปยังระดับการจัดการ Workspace และตำแหน่งมันที่ต้องการ
เมื่อเผยแพร่/วิดีโอเซสชันทดสอบผู้เล่นจะสามารถใช้งานวัตถุผ่านทาง ProximityPrompt และวาดศิลปะบนพื้นผิวที่กำหนด
เปลี่ยนหน้า Canvas
ภายใต้หลังคา โมดูลใช้ SurfaceGui เพื่อแสดงผลงานศิลปะ เพื่อกำหนดพื้นผิวที่ศิลปะปรากฏขึ้น:
เลือก SurfaceCanvas เมช
ในด้านล่างของหน้าต่าง โปรพีเพอร์ตี้ ค้นหา ค่านิยม SurfaceCanvasFace ด้วยค่าเริ่มต้นของ Right
คลิกค่าตัวละครและใส่หนึ่งในหกมูลค่าที่อธิบาย Enum.NormalId
มูลค่าละตรับ | รหัสปกติที่ตรงกัน |
---|---|
หน้าด้านหน้า | Enum.NormalId.Front |
กลับ | Enum.NormalId.Back |
ขวา | Enum.NormalId.Right |
ซ้าย | Enum.NormalId.Left |
ด้านบน | Enum.NormalId.Top |
ด้านล่าง | Enum.NormalId.Bottom |
ใช้สินทรัพย์ศิลปะที่กำหนดเอง
เพื่อให้เหมาะกับธีมของประสบการณ์ของคุณมากขึ้น คุณอาจใช้ชุดทรัพยากรที่กำหนดเองของคุณแทนที่จะใช้ค่าเริ่มต้น สิ่งนี้สามารถทำได้ผ่านหน้า กำหนดค่า ใน Script โดยใ
สคริป
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 ฟังจาก a 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
รูปแบบ
รายการศิลปะพื้นผิว
รูปภาพที่จะใช้เป็นงานศิลปะสำหรับพื้นผิวเรียบร้อยได้รับการแทนที่โดยโต๊ะที่มีสองค่า
กุญแจ | คำอธิบาย |
---|---|
name | ชื่อแสดงตัวแห่งรายละเอียด |
assetId | รหัสสินทรัพย์ของรูปภาพที่จะรวมอยู่ |
ฟังก์ชัน
กำหนดค่า
เปลี่ยนตั้งค่าการกำหนดค่าเริ่มต้นผ่านคีย์ / ค่าต่อไปนี้ในตาราง config เท่านั้น ฟังก์ชันนี้สามารถเรียกได้จาก Script เท่านั้น
กุญแจ | คำอธิบาย | เริ่มต้น |
---|---|---|
enabled | เปิด/ปิดการใช้งานโมดูล | จริง |
assets | รายการ พื้นผิวศิลปะดิจิทัล รูปแบบ | (ดูรหัสด้านล่าง) |
quotaPerPlayer | จำนวนสูงสุดของชิ้นส่วนศิลปะที่ผู้เล่นแต่ละคนสามารถวางได้ | 2 |
สคริป
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
รับ Canvases
กลับรายการบนพื้นที่เติมเต็มทั้งหมดที่มีแท็ก SurfaceCanvas
สคริป
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
สถานที่ศิลปะ
วางโปรแกรมชิ้นงานศิลปะในนามของผู้เล่น หมายเหตุว่าวัตถุ canvas จะต้องถูกแท็กด้วยป้ายชื่อ SurfaceCanvas เมื่อเซิร์ฟเวอร์ถูกไอนิเซียไลซ์ ให้ใช้เฉพาะกับคันวาดที่ก
สคริป
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)
ลบศิลปะทั้งหมด
ลบงานศิลปะทั้งหมดออกจากพื้นผิวทั้งหมด
สคริป
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
เหตุการณ์
artเปลี่ยนแปลง
เปิดให้เปลี่ยนแปลงเมื่องานศิลปะถูกเปลี่ยนที่สถานที่หนึ่งบนแคนวาส. เมื่องานศิลปะถูกลบออกจะ artId จะเป็น
ตัวแปร | |
---|---|
ตรา: BasePart | พื้นที่บนตัวอักษรซึ่งศิลปะถูกเปลี่ยนแปลง |
สปอต: Frame | ภายใน Frame ที่มีงานศิลปะ ImageLabel |
ตําแหน่ง: Vector3 | ตำแหน่งที่แน่นอนที่ภาพถูกวาง |
artId: string | รหัสสินทรัพย์ของงานศิลปะใหม่ |
ชื่อเจ้าของ: 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)
ตัวเลือกที่แสดง
เกิดขึ้นเมื่อตัวเลือกศิลปะพื้นผิวปรากฏให้ผู้เล่นเห็น เหตุการณ์นี้สามารถเชื่อมต่อได้ใน 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)