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 thấy như thể họ là một phần của quá trình xây dựng không gian mà họ đang ở trong. The Bề mặtArt 模块 cho phép người chơi literally leave their mark in an experience.

Sử dụng mô-đun

Cài đặt

Để sử dụng module SurfaceArt trong một trải nghiệm:

  1. Từ trang Xem, mở trang Hộp công cụ và chọn trang Cửa hàng Creator .

    Toolbox toggle button in Studio
  2. Đảm bạn chắn chọn Mô Hình sắp xếp, then click the Xem tất cả button for Các danh mục .

  3. Tìm và nhấp vào Dev Modules mảnh.

  4. Tìm modul Nghệ thuật bề mặt và nhấp vào nó, hoặc kéo nó vào 3D view.

  5. Trong cửa sổ Explorer, di chuyển toàn bộ mô hình SurfaceArt đến ServerScriptService . Khi chạy trải nghiệm, mô-đun sẽ được phân bố đến các dịch vụ khác nhau và bắt đầu chạy.

Định vị bản vẽ

Modul này đi kèm với một mô hình SurfaceCanvas bạn có thể đặt vào thế giới 3D. Đây là nơi người chơi sẽ tương tác để đặt vật phẩm vào bề mặt của nó.

  1. Tìm SurfaceCanvas mạng trong thư mục Workspace của modul chính.

  2. Di chuyển nó vào cấp độ cao nhất Workspace và đặt nó ở vị trí mà bạn muốn.

  3. Khi công bố/chạy một phiên kiểm tra, người chơi sẽ có thể tương tác với đối tượng thông qua một ProximityPrompt và đặt vật phẩm trên bề mặt đã định.

Thay đổi khuôn mặt Canvas

Ở dưới cap, mô-đun sử dụng một SurfaceGui để hiển thị các mặt hàng nghệ thuật. Để cấu hình trên mặt nào nghệ thuật xuất hiện:

  1. Chọn Bề mặt Canvas meshes.

  2. Ở phía dưới của cái Properties window, locate the SurfaceCanvasFace attribute with a default value of Right .

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

Giá trị đặc tínhID Phù Hợp Normal
Phía trước Enum.NormalId.Front
Quay lại Enum.NormalId.Back
Phải Enum.NormalId.Right
Rẽ trái Enum.NormalId.Left
Trên cùng Enum.NormalId.Top
Phần dưới cùng Enum.NormalId.Bottom

Sử dụng tài nguyên nghệ thuật tùy chỉnh

Để phù hợp 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 bạn thay vì các giá trị mặc định. Điều này có thể được thực hiện thông qua chức năng tùy chỉnh , được gọi từ một Script trong ServerScriptService</

Tập lệnh

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

Xóa tất cả các bản vẽ

Để xóa tất cả những bức tranh hiện có từ tất cả các bản vẽ trên thế giới, gọi chức năng xóa tất cả art từ một Script .

Tập lệnh

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

Hiển thị Effects Tùy chỉnh

Có thể có trường hợp bạn muốn bao gồm các hiệu ứng thị giác bổ sung khi bức tranh được đặt. Modul này hiển thị một sự kiện tên là artChanged trên client bạn có thể kết nối và thêm logica của riêng bạn.

Script địa phương

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
-- Hiển thị một vài lấp lánh trong 3 giây
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Tham khảo API

Các loại

Hồ sơ nghệ thuật bề mặt

Hình ảnh được sử dụng như một bức tranh cho bản vẽ được diễn tả bằng một bảng có hai giá trị.

Chìa khóaMô tả
nameTên hiển thị metadữ.
assetIdID tài nguyên của hình ảnh để bao gồm.

Hàm

điều chỉnh

điều chỉnh(config: table )

Làm mất các lựa chọn cài đặt mặc định qua các chìa khóa/giá trị được đề xuất dưới đây trong bảng config . Chức năng này chỉ có thể được gọi từ một Script .

Chìa khóaMô tảMặc định
enabledBật/tắt chức năng của các mô-đun.đúng
assetsDanh sách các SurfaceArtAsset kiểu.(xem mã bên dưới)
quotaPerPlayerSố lượng tối đa các bộ phận nghệ thuật mà mỗi người chơi có thể đặt.2
Tập lệnh

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

nhậnCanvases

nhậnCanvases() : table

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

Tập lệnh

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

đặt Art

đặtArt(người chơi: Player , canvas: BasePart )

Đặt một tác phẩm nghệ thuật lên trên behalf của một người chơi. Ghi nhớ 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ó được khuyến nghị sử dụng này chỉ với một tác phẩm đư

Tập lệnh

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

xóa tất cả các bức vẽ

xóa tất cả các bản vẽ

Loại bỏ tất cả các bức vẽ từ tất cả các bề mặt.

Tập lệnh

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

Sự kiện

artĐã thay đổi

Lửa khi một bức tranh được thay đổi ở một vị trí cụ thể trên bản vẽ. Khi bức tranh được xóa, artId sẽ được truyền làm tham số thứ ba cho hệ thống xử

Các biến
canvas: BasePartBản vẽ màu trên đó bức vẽ đã được thay đổi.
spot: FrameClass.Frame nội bộ chứa hội họa ImageLabel .
位置: Vector3Vị trí chính xác mà bức tranh đã được đặt.
artId: stringID tài sản của bức tranh mới.
OwnerUserId: numberUserId của người đặt vẽ.
Script địa phương

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)

đã hiển thị

Lửa khi một hộp thoại hướng dẫn người chơi thấy đã hiển thị. Hàm được kết nối nhận bản vẽ trên màn hình mà hộp thoại đó hiển thị. Sự kiện này chỉ có thể kết nối trong một LocalScript .

Các biến
canvas: BasePartBản vẽ mà nội dung đang được hiển thị.
Script địa phương

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)

ẩn

Kích hoạt khi một hộp thoại hướng dẫn người dùng được ẩn. Hàm liên kết nhận bản vẽ mà hộp thoại đang hiển thị. Sự kiện này chỉ có thể kết nối trong một LocalScript .

Các biến
canvas: BasePartBản vẽ mà nội dung đã được hiển thị.
Script địa phương

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)

selectorHiển thị

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

Script địa phương

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)

ẩnSelector

Lửa khi người dùng người dùng người dùng bị ẩn khỏi mặt trên của máy người chơi. Sự kiện này chỉ có thể được kết nối trong một LocalScript .

Script địa phương

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)