표면 예술

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

플레이어는 종종 공간에 있는 것처럼 느끼고 있습니다. 지면 예술개발자 모듈은 플레이어가 경험에 문자 그대로 표시를 남기게 합니다.

모듈 사용

설치

경험에서 표면 예술 모듈을 사용하려면:

  1. 보기 탭에서 도구 상자를 엽니다. 그리고 크리에이터 스토어 탭을 선택합니다.

    Toolbox toggle button in Studio
  2. 모델 정렬을 선택한 다음 모두 보기 버튼을 클릭하여 범주 에 대한 전체 보기를 클릭하십시오.

  3. 찾아 클릭하십시오 개발자 모듈 타일.

  4. 표면 예술 모듈을 찾아 클릭하거나 3D 뷰에 드래그 앤 드롭하세요.

  5. 탐색기 창에서 전체 서피스 아트 모델을 서버스크립트 서비스에 배포하십시오. 경험을 실행할 때 모듈은 다양한 서비스에 배포되고 실행을 시작합니다.

캔버스 배치

이 모듈에는 3D 세계에 배치할 수 있는 하나의 표면 캔버스 모델이 포함되어 있습니다. 이 모델은 플레이어가 작품을 그 표면에 배치하는 데 상호 작용할 모델입니다.

  1. 모듈의 메인 폴더 내의 표면 캔버스 메쉬를 찾습니다.

  2. 최상위 수준의 작업 공간 계층에 이동하고 원하는 위치에 배치하십시오.

  3. 테스트 세션을 게시/실행할 때 플레이어는 ProximityPrompt 를 통해 개체와 상호 작용하고 정의된 표면에 예술을 배치할 수 있습니다.

캔버스 얼굴 변경

하단에 있는 SurfaceGui를 사용하여 아트 아이템을 표시합니다. 아트 아이템이 어떤 표면에 표시되는지 구성하려면:

  1. Select the 서피스 캔버스 메쉬.

  2. 속성 창의 하단에서 서피스 캔버스 페이스 특성을 찾습니다. 기본값으로 오른쪽을 사용하여 속성을 찾습니다.

  3. 특성을 클릭하고 열거형 Enum.NormalId을 설명하는 6개의 값 중 하나를 입력하십시오.

특성 값해당 일반 ID
Enum.NormalId.Front
뒤로 가기 Enum.NormalId.Back
오른쪽 Enum.NormalId.Right
왼쪽 Enum.NormalId.Left
상단 Enum.NormalId.Top
하단 Enum.NormalId.Bottom

사용자 정의 아트 자산 사용

경험의 테마에 맞게 사용자 지정 자산을 사용하려면 기본값 대신 사용자 지정 자산을 사용하십시오. 이 작업은 구성 함수, Script에서 호출하는 1>Class.Script1> 에서 수행할 수 있습니다.

스크립트

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

모든 캔버스 지우기

세계의 모든 캔버스에서 모든 예술을 제거하려면 모든 예술 제거 함수를 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포함할 이미지의 자산 ID.

함수

구성

구성(구성: table )

Class.Script 테이블의 다음 키/값을 통해 기본 구성 옵션을 재정의합니다. 이 함수는 Script 에서만 호출할 수 있습니다.

설명기본
enabled모듈의 기능을 켜거나 끕니다.
assetsSurfaceArtAsset 형식의 목록.(아래 코드 참조)
quotaPerPlayer각 플레이어가 배치할 수 있는 최대 아트 조각 수.2
스크립트

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

캔버스 가져오기

getCanvases() : table

모든 캔버스에 SurfaceCanvas 태그가 있는 경우 태그가 있는 모든 캔버스를 반환합니다.

스크립트

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

장소 예술

placeArt(플레이어: Player, canvas: BasePart

플레이어 대신 아트 피스 프로그램을 작성합니다. 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 Award를 첫 번째 캔버스에 배치하십시오.
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변경

캔버스의 특정 위치에 있는 작품이 변경되면 발생합니다. 작품이 제거되면 artIdnil 이 됩니다. 참고로 Vector3 값이 이벤트 처리기에 전달되어 작품

매개 변수
캔버스: BasePart작품이 변경된 캔버스.
스팟: Frame내부 Frame 작품 ImageLabel 포함.
스팟 위치: Vector3작품이 배치된 정확한 위치.
artId: string새 작품의 자산 ID.
소유자 아이디: numberUserId 아트를 배치한 플레이어의 Class.Player.UserId|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)

숨긴 선택자

플레이어가 지면 예술 선택기 UI를 숨기면 화면 예술 선택기 UI가 표시됩니다. 이 이벤트는 단지 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)