플레이어는 종종 자신이 속한 공간을 구축하는 일부라고 느끼는 것을 즐깁니다.표면 예술 개발자 모듈은 플레이어가 경험에서 말 그대로 자신의 표식을 남길 수 있게 합니다.
모듈 사용량
설치
경험에서 표면 예술 모듈을 사용하려면:
보기 탭에서 도구 상자 를 열고 크리에이터 스토어 탭을 선택합니다.
모델 정렬이 선택되었는지 확인한 다음 모두 보기 버튼을 클릭하여 카테고리를 확인하십시오.
찾아서 클릭하십시오 개발자 모듈 타일.
표면 예술 모듈을 찾아 클릭하거나 3D 뷰에 드래그 앤 드롭하세요.
탐색기 창에서 전체 서피스 아트 모델을 서버 스크립트 서비스로 이동합니다.경험을 실행하면 모듈이 다양한 서비스에 배포되고 실행을 시작합니다.
캔버스 위치 지정
모듈에는 3D 세계에 위치할 수 있는 하나의 표면 캔버스 모델이 포함되어 있습니다.이 모델은 플레이어가 표면에 예술을 배치하기 위해 상호작용할 모델입니다.
모듈의 메인 폴더 내 표면 캔버스 메시를 작업 공간 폴더에서 찾습니다.
최상위 수준의 작업 영역 계층으로 이동하고 원하는 위치에 배치합니다.
테스트 세션을 게시하거나 실행하면 플레이어가 ProximityPrompt를 통해 개체와 상호작용하고 정의된 표면에 아트를 배치할 수 있습니다.
캔버스 면 변경
내부에서 모듈은 아트 아이템을 표시하기 위해 SurfaceGui 를 사용합니다. 아트가 표시되는 표면을 구성하려면:
표면 캔버스 메시를 선택합니다.
속성 창의 하단에서 표면 캔버스 얼굴 특성에 기본값 오른쪽 으로 속성 SurfaceCanvasFace를 찾습니다.
특성을 클릭하고 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
플레이어를 대신하여 예술 작품을 프로그래밍 방식으로 배치합니다.서버가 초기화될 때 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()
이벤트
아트 변경
캔버스의 특정 위치에서 작품이 변경될 때 발생합니다.작품이 제거되면 artId가 nil가 됩니다.이벤트 처리기에 세 번째 매개 변수로 Vector3이 전달되어 작품이 배치된 정확한 위치에 사용자 지정 효과를 배치할 수 있습니다.이 이벤트는 LocalScript
매개 변수 | |
---|---|
캔버스: BasePart | 예술 작품이 변경된 캔버스. |
스팟: Frame | 내부 Frame 아트워크가 포함된 내부 ImageLabel . |
스팟 위치: Vector3 | 아트워크가 배치된 정확한 위치. |
아트ID: string | 새 작품의 자산 ID. |
소유자 유저ID: number | 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)
선택된 항목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)