표면 예술

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

플레이어는 종종 자신이 속한 공간을 구축하는 일부라고 느끼는 것을 즐깁니다.표면 예술 개발자 모듈은 플레이어가 경험에서 말 그대로 자신의 표식을 남길 수 있게 합니다.

모듈 사용량

설치

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

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

    Toolbox toggle button in Studio
  2. 모델 정렬이 선택되었는지 확인한 다음 모두 보기 버튼을 클릭하여 카테고리를 확인하십시오.

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

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

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

캔버스 위치 지정

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

  1. 모듈의 메인 폴더 내 표면 캔버스 메시를 작업 공간 폴더에서 찾습니다.

  2. 최상위 수준의 작업 영역 계층으로 이동하고 원하는 위치에 배치합니다.

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

캔버스 면 변경

내부에서 모듈은 아트 아이템을 표시하기 위해 SurfaceGui 를 사용합니다. 아트가 표시되는 표면을 구성하려면:

  1. 표면 캔버스 메시를 선택합니다.

  2. 속성 창의 하단에서 표면 캔버스 얼굴 특성에 기본값 오른쪽 으로 속성 SurfaceCanvasFace를 찾습니다.

  3. 특성을 클릭하고 Enum.NormalId를 설명하는 여섯 가지 값 중 하나를 입력하십시오.

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

사용자 지정 아트 자산 사용

경험의 주제에 더 적합하도록 기본값 대신 사용자 지정 자산 집합을 사용할 수 있습니다.이는 configure 함수를 통해 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 함수를 호출하십시오 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.

함수

구성

구성(config: table)

기본 구성 옵션을 다음 키/값을 통해 재정의합니다 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,
})

캔버스 가져오기

getCanvases(): table

SurfaceCanvas 태그로 식별된 모든 캔버스를 반환합니다.

스크립트

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

장소Art

placeArt(플레이어: Player , 캔버스: 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 상을 첫 번째 캔버스에 배치
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

모두 제거Art

모두 제거() removeAllArt()

모든 표면에서 모든 예술 작품을 제거합니다.

스크립트

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

이벤트

아트 변경

캔버스의 특정 위치에서 작품이 변경될 때 발생합니다.작품이 제거되면 artIdnil가 됩니다.이벤트 처리기에 세 번째 매개 변수로 Vector3이 전달되어 작품이 배치된 정확한 위치에 사용자 지정 효과를 배치할 수 있습니다.이 이벤트는 LocalScript

매개 변수
캔버스: BasePart예술 작품이 변경된 캔버스.
스팟: Frame내부 Frame 아트워크가 포함된 내부 ImageLabel .
스팟 위치: Vector3아트워크가 배치된 정확한 위치.
아트ID: string새 작품의 자산 ID.
소유자 유저ID: numberUserId 아트를 배치한 플레이어의
로컬 스크립트

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)

선택된 항목Shown

플레이어에게 표면 아트 선택기 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)

선택자 숨기기Hidden

플레이어에게 표면 아트 선택기 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)