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 của việc xây dựng không gian họ ở.Các module phát triển bề mặt bề mặt cho phép người chơi thực sự rời khỏi dấu hiệu của họ trong một trải nghiệm.

Sử dụng module

Cài đặt

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

  1. Từ tab Xem, mở Hộp công cụ và chọn tab Cửa hàng Nhà sáng tạo .

    Toolbox toggle button in Studio
  2. Hãy chắc chắn rằng kiểu sắp xếp Mô hình được chọn, sau đó nhấp vào nút Xem tất cả đối với Danh mục .

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

  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 cửa sổ 3D.

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

Xác định vị trí bản vẽ

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

  1. Tìm mesh Bảng vẽ bề mặt bên trong thư mục Không gian làm việc của thư mục chính của module.

  2. Di chuyển nó vào cấp cao nhất Không gian làm việc và đặt nó ở vị trí mong muốn.

  3. Sau khi xuất bản/chạy 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 nghệ thuật trên bề mặt được xác định.

Thay đổi khuôn mặt bản vẽ

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

  1. Chọn lưới SurfaceCanvas .

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

  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ị thuộc tínhID Bình thường tương ứng
Phía trước Enum.NormalId.Front
Quay lại Enum.NormalId.Back
Phải Enum.NormalId.Right
Bên trái Enum.NormalId.Left
Trên cùng Enum.NormalId.Top
Ở đáy Enum.NormalId.Bottom

Sử dụng tài sả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 riêng của mình thay vì các mặc định.Điều này có thể được thực hiện thông qua chức năng configure , đượ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ả các tác phẩm nghệ thuật hiện có từ tất cả các bản vẽ trên thế giới, hãy gọi chức năng removeAllArt từ một Script .

Tập lệnh

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("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 thêm hiệu ứng hình ảnh khi một tác phẩm nghệ thuật được đặt.Mô-đun này tiết lộ một sự kiện có tên là artChanged trên khách hàng mà bạn có thể kết nối và thêm logic riêng của bạn.

Tập lệnh đị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 số tia lửa trong 3 giây
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

Tham chiếu API

Loại

Tài sản SurfaceArt

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

Nhân vật chínhMô tả
nameTên hiển thị metadata.
assetIdID tài sản của hình ảnh để bao gồm.

Chức năng

điều chỉnh

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

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

Nhân vật chínhMô tảMặc định
enabledBật/tắt chức năng của mô-đun trên hoặc tắt.đúng
assetsDanh sách SurfaceArtAsset các loại.(xem mã bên dưới)
quotaPerPlayerSố tối đa các mảnh nghệ thuật có thể được đặt bởi mỗi người chơi.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ận đượcCanvases

getCanvases(): table

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

Tập lệnh

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

nhận dạng nơi

placeArt(người chơi: Player , bản vẽ: BasePart )

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

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 Giải thưởng Bloxy từ 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ài viết

loại bỏAllArt()

Loại bỏ tất cả các tác phẩm nghệ thuật 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

artChanged đã thay đổi

Bắt lửa khi một tác phẩm nghệ thuật được thay đổi tại một vị trí cụ thể trên bản 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 là tham số thứ ba cho người xử lý sự kiện để bạn có thể vị trí một hiệu ứng tùy chỉnh tại vị trí chính xác mà tác phẩm nghệ thuật được đặt.Sự kiện này chỉ có thể kết nối trong một LocalScript .

Tham số
bản vẽ: BasePartBản vẽ mà tác phẩm nghệ thuật đã được thay đổi.
điểm: FrameNội bộ Frame chứa tác phẩm nghệ thuật ImageLabel .
vị trí điểm: Vector3Vị trí chính xác mà tác phẩm nghệ thuật được đặt.
artId: stringID tài sản của tác phẩm mới.
chủ sở hữuUserId: numberUserId của người chơi đã đặt tác phẩm nghệ thuật.
Tập lệnh đị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)

được hiển thị nhanh

Bắt lửa khi một thông báo tương tác bản vẽ được hiển thị cho người chơi.Chức năng được kết nối nhận canvas mà lời nhắc đang hiển thị.Sự kiện này chỉ có thể kết nối trong một LocalScript .

Tham số
bản vẽ: BasePartBản vẽ mà lời nhắc đang hiển thị.
Tập lệnh đị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 nhanh promptHidden

Bắt lửa khi một lời nhắc tương tác bản vẽ được ẩn.Chức năng được kết nối nhận canvas mà lời nhắc đang hiển thị.Sự kiện này chỉ có thể kết nối trong một LocalScript .

Tham số
bản vẽ: BasePartBản vẽ mà lời nhắc được hiển thị.
Tập lệnh đị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ị

Bắt lửa khi giao diện lựa 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 .

Tập lệnh đị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)

nhà lựa chọnHidden

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

Tập lệnh đị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)