Nghệ Thuật Bề Mặt

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Người chơi thường thích cảm giác như họ là một phần trong việc xây dựng không gian mà họ đang ở. Mô-đun SurfaceArt mô-đun nhà phát triển cho phép người chơi để lại dấu ấn của họ trong một trải nghiệm.

Cách Sử Dụng Mô-đun

Cài Đặt

Để sử dụng mô-đun SurfaceArt trong một trải nghiệm:

  1. Từ menu Cửa Sổ của Studio hoặc thanh công cụ tab Trang Chủ, mở Toolbox và chọn tab Creator Store.

  2. Đảm bảo rằng phân loại Models đã được chọn, sau đó nhấp vào nút Xem Tất Cả cho Categories.

  3. Tìm và nhấp vào ô Packages.

  4. Tìm mô-đun Nghệ Thuật Bề Mặt và nhấp vào nó, hoặc kéo và thả nó vào chế độ xem 3D.

  5. Trong cửa sổ Explorer, di chuyển toàn bộ mô hình SurfaceArt vào ReplicatedStorage. Khi chạy trải nghiệm, mô-đun sẽ bắt đầu hoạt động.

Định Vị Bảng Vẽ

Mô-đun đi kèm với một mô hình SurfaceCanvas mà bạn có thể định vị trong thế giới 3D. Mô hình này là thứ mà người chơi sẽ tương tác để đặt tác phẩm nghệ thuật lên bề mặt của nó.

  1. Tìm lưới SurfaceCanvas bên trong thư mục Workspace của thư mục chính của mô-đun.

  2. Di chuyển nó vào hệ thống phân cấp Workspace cấp cao nhất và định vị nó ở nơi mong muốn.

  3. Khi xuất bản/chạy một phiên thử nghiệm, người chơi sẽ có thể tương tác với đối tượng thông qua một ProximityPrompt và đặt tác phẩm nghệ thuật lên bề mặt được xác định.

Thay Đổi Mặt Bảng Vẽ

Dưới đây, mô-đun sử dụng SurfaceGui để hiển thị các đối tượng nghệ thuật. Để cấu hình bề mặt mà nghệ thuật xuất hiện trên:

  1. Chọn lưới SurfaceCanvas.

  2. Ở dưới cùng của cửa sổ Thuộc Tính, tìm thuộc tính SurfaceCanvasFace với giá trị mặc định là Right.

  3. Nhấp vào thuộc tính và nhập một trong sáu giá trị mô tả Enum.NormalId.

Giá Trị Thuộc TínhID Bình Thường Tương Ứng
Mặt TrướcEnum.NormalId.Front
Mặt SauEnum.NormalId.Back
Mặt PhảiEnum.NormalId.Right
Mặt TráiEnum.NormalId.Left
Mặt TrênEnum.NormalId.Top
Mặt DướiEnum.NormalId.Bottom

Sử Dụng Tài Nguyên Nghệ Thuật Tùy Chỉnh

Để phù hợp hơn với chủ đề của trải nghiệm của bạn, bạn có thể sử dụng bộ tài nguyên tùy chỉnh của riêng mình thay vì các tài nguyên mặc định. Điều này có thể được thực hiện thông qua hàm cấu hình, được gọi từ một Script trong ServerScriptService.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local customAssets = {
CustomAsset1 = {
name = "Tài Nguyên Tùy Chỉnh 1",
assetId = "rbxassetid://7322508294",
},
CustomAsset2 = {
name = "Tài Nguyên Tùy Chỉnh 2",
assetId = "rbxassetid://7322547665",
},
}
SurfaceArt.configure({
assets = customAssets,
})

Xóa Tất Cả Bảng Vẽ

Để xóa tất cả nghệ thuật hiện có trên tất cả các bảng vẽ trong thế giới, gọi hàm removeAllArt từ một Script.

Script

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

Hiển Thị Hiệu Ứng Tùy Chỉnh

Có thể có trường hợp bạn muốn bao gồm hiệu ứng hình ảnh bổ sung khi một tác phẩm nghệ thuật được đặt. Mô-đun này cung cấp một sự kiện gọi là artChanged trên client mà bạn có thể kết nối và thêm logic của riêng bạn.

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
-- Hiện một số tia lửa trong 3 giây
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Tài Liệu API

Loại

SurfaceArtAsset

Hình ảnh được sử dụng làm nghệ thuật cho bảng vẽ được đại diện bằng một bảng với hai giá trị.

KhóaMô Tả
nameTên hiển thị metadata.
assetIdID tài sản của hình ảnh cần bao gồm.

Hàm

configure

configure(config: table)

Ghi đè các tùy chọn cấu hình mặc định thông qua các khóa/giá trị sau trong bảng config. Hàm này chỉ có thể được gọi từ một Script.

KhóaMô TảMặc định
enabledBật hoặc tắt chức năng của mô-đun.true
assetsDanh sách các loại SurfaceArtAsset.(xem mã dưới đây)
quotaPerPlayerSố lượng tác phẩm nghệ thuật tối đa mà mỗi người chơi có thể đặt.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

Trả về tất cả các bảng vẽ được gán nhãn với nhãn SurfaceCanvas.

Script

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

placeArt

placeArt(player: Player, canvas: BasePart)

Đặt một tác phẩm nghệ thuật theo cách lập trình thay mặt cho một người chơi. Lưu ý rằng đối tượng canvas phải được gán nhãn với nhãn SurfaceCanvas khi máy chủ được khởi tạo. Nên sử dụng điều này chỉ với một bảng vẽ được trả về từ getCanvases.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- Đặt Giải Thưởng Bloxy từ các tài nguyên nghệ thuật mặc định vào bảng vẽ đầu tiên
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

Xóa tất cả tác phẩm nghệ thuật khỏi tất cả các bề mặt.

Script

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

Sự Kiện

artChanged

Kích hoạt khi một tác phẩm nghệ thuật được thay đổi tại một vị trí cụ thể trên bảng vẽ. Khi một tác phẩm nghệ thuật bị xóa, artId sẽ là nil. Lưu ý rằng một giá trị Vector3 được truyền dưới dạng tham số thứ ba cho hàm xử lý sự kiện để bạn có thể đặt một hiệu ứng tùy chỉnh tại vị trí chính xác nơi tác phẩm nghệ thuật được đặt. Sự kiện này chỉ có thể được kết nối trong một LocalScript.

Tham Số
canvas: BasePartBảng vẽ mà trên đó tác phẩm nghệ thuật đã được thay đổi.
spot: FrameBảng nội bộ Frame chứa ImageLabel của tác phẩm nghệ thuật.
spotPosition: Vector3Vị trí chính xác nơi tác phẩm nghệ thuật được đặt.
artId: stringID tài sản của tác phẩm nghệ thuật mới.
ownerUserId: numberID người dùng của người chơi đã đặt nghệ thuật (UserId).
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Nghệ thuật được đặt tại:", spotPosition)
print("ID tài sản nghệ thuật:", artId)
print("Nghệ thuật được đặt bởi:", ownerId)
end)

promptShown

Kích hoạt khi một prompt tương tác với bảng vẽ được hiển thị cho người chơi. Hàm kết nối nhận bảng vẽ mà trên đó prompt đang hiển thị. Sự kiện này chỉ có thể được kết nối trong một LocalScript.

Tham Số
canvas: BasePartBảng vẽ mà trên đó prompt đang hiển thị.
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

Kích hoạt khi một prompt tương tác với bảng vẽ bị ẩn. Hàm kết nối nhận bảng vẽ mà trên đó prompt đã được hiển thị. Sự kiện này chỉ có thể được kết nối trong một LocalScript.

Tham Số
canvas: BasePartBảng vẽ mà trên đó prompt đã hiển thị.
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

Kích hoạt khi giao diện chọn nghệ thuật bề mặt được hiển thị cho người chơi. Sự kiện này chỉ có thể được kết nối trong một LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "đã mở giao diện chọn nghệ thuật bề mặt")
end)

selectorHidden

Kích hoạt khi giao diện chọn nghệ thuật bề mặt bị ẩn đối với người chơi. Sự kiện này chỉ có thể được kết nối trong một LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "đã đóng giao diện chọn nghệ thuật bề mặt")
end)
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.