감정 표현은 모든 소셜 체험의 핵심 구성 요소입니다. EmoteBar 개발자 모듈의 목표는 플레이어에게 의미 있는 소셜 인터랙션을 활발히 수행할 수 있도록 액세스 가능하고 사용자 정의할 수 있는 방법을 제공하는 것입니다.
모듈 사용
설치
체험에서 EmoteBar 모듈을 사용하는 방법
보기 탭에서 도구 상자를 열고 마켓플레이스 탭을 선택합니다.
모델 정렬이 선택되었는지 확인한 다음 카테고리에서 모두 보기 버튼을 클릭합니다.
개발자 모듈 타일을 찾아 클릭합니다.
감정 표현 표시줄 모듈을 찾아 클릭하거나 3D 보기로 끌어다 놓습니다.
탐색기 창에서 전체 EmoteBar 모델을 ServerScriptService로 이동합니다. 체험을 실행하면 모듈이 다양한 서비스에 배포되고 실행되기 시작합니다.
구성
모듈은 7개 감정 표현으로 사전 구성되어 있으며 크리에이터가 보유하고 있는 감정 표현과 표시 옵션으로 쉽게 사용자 정의할 수 있습니다. 또한 플레이어가 Lil Nas X, Royal Blood, Twenty One Pilots 등과 같은 이전 Roblox 이벤트의 감정 표현을 보유하고 있는 경우, 이러한 감정 표현은 사용 가능한 감정 표현 목록에 자동으로 추가됩니다.
ServerScriptService에서 새로운 Script를 만들고 이름을 ConfigureEmotes로 변경합니다.
다음의 코드를 이 새로운 ConfigureEmotes 스크립트에 붙여 넣습니다. false의 useDefaultEmotes 설정이 기본 감정 표현을 재정의하고 setEmotes 함수를 통해 사용자 지정 감정 표현을 정의할 수 있게 해줍니다.
Script - ConfigureEmoteslocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.configureServer({useDefaultEmotes = false,})EmoteBar.setEmotes({{name = "Hello",animation = "rbxassetid://3344650532",image = "rbxassetid://7719817462",defaultTempo = 1,},{name = "Applaud",animation = "rbxassetid://5915693819",image = "rbxassetid://7720292217",defaultTempo = 2,},})
메가 감정 표현
동일한 영역의 여러 플레이어가 동일한 시간에 동일한 감정 표현을 실행할 때 메가 감정 표현이 형성됩니다. 플레이어가 더 많이 참여할수록 메가 감정 표현은 점점 더 커집니다. 플레이어들이 이 감정 표현의 실행을 중지하면 메가 감정 표현이 점점 작아져 결국 사라집니다.
템포
감정 표현의 템포는 버튼을 한 번 누를 때 플레이하는 속도입니다. 감정 표현의 기본 속도는 defaultTempo에 의해 결정됩니다. 감정 표현의 버튼을 더 빠르게 또는 더 느리게 눌러 속도를 높이거나 낮출 수 있습니다.
API 참조
유형
감정 표현
각 감정 표현은 다음과 같은 키-값 쌍이 들어 있는 사전의 구조로 표현됩니다.
키 | 유형 | 설명 |
---|---|---|
name | 문자열 | 감정 표현 이름입니다(예: "Shrug"). |
animation | 문자열 | 감정 표현의 애니메이션에 대한 애셋 ID입니다. |
image | 문자열 | GUI의 감정 표현 이미지에 대한 애셋 ID입니다. |
defaultTempo | 숫자 | 감정 표현 애니메이션을 플레이하는 기본 속도 인수입니다. 예를 들어, 템포가 2이면 애니메이션이 보통 속도의 두 배로 플레이됩니다. 0보다 커야 합니다. |
isLocked | void | 감정 표현의 활성화가 '잠겼는지' 여부입니다. |
열거형
EmoteBar.GuiType
이름 | 요약 |
---|---|
EmoteBar | 감정 표현이 개별 '페이지'로 구분되어 화면 하단을 따라 표시줄에 나타나는 기본 형태입니다. |
EmoteWheel | 플레이어가 해당 플레이어 캐릭터를 클릭하거나 누를 때 감정 표현이 링에 표시되는 변형입니다. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.configureClient({guiType = EmoteBar.GuiType.EmoteWheel,})
함수
configureServer
configureServer(config:table):nil
config 테이블의 다음 키/값을 통해 기본 서버측 구성 옵션을 무효화합니다. 이 함수는 Script에서만 호출되며 변경 사항은 자동으로 모든 클라이언트에 복제됩니다.
키 | 설명 | 기본 |
---|---|---|
useDefaultEmotes | 제공된 기본 감정 표현이 포함되는지 여부입니다. | true |
useMegaEmotes | 메가 감정 표현 기능을 활성화 또는 비활성화합니다. | true |
emoteMinPlayers | 메가 감정 표현에 기여하기 위해 동일한 감정 표현을 실행하는 최소 플레이어 수입니다. | 3 |
emoteMaxPlayers | 메가 감정 표현에 기여하기 위해 동일한 감정 표현을 실행하는 최대 플레이어 수입니다. | 50 |
playParticles | 플레이어가 머리 위에 떠다니는 입자로 플레이하는 감정 표현을 활성화 또는 비활성화합니다. | true |
sendContributingEmotes | 메가 감정 표현에 기여하기 위해 작은 감정 표현 아이콘을 보내는 것을 활성화 또는 비활성화합니다. | true |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.configureServer({emoteMinPlayers = 2,playParticles = false,})
configureClient
configureClient(config:table):nil
config 테이블의 다음 키/값을 통해 기본 클라이언트 측 구성 옵션을 무효화합니다. 이 함수는 LocalScript에서만 호출할 수 있습니다. guiType의 값에 따라 표시된 탭의 옵션도 적용됩니다.
일반
키 | 설명 | 기본 |
---|---|---|
guiType | GUI가 감정 표현을 표시하는 데 어떤 형태를 사용할 것인지 제어합니다(EmoteBar.GuiType). | EmoteBar |
useTempo | 사용자가 동일한 감정 표현을 리드미컬하게 반복적으로 활성화하여 감정 표현을 얼마나 빠르게 또는 느리게 플레이할지 제어할 수 있는 템포 기능을 활성화 또는 비활성화합니다. | true |
tempoActivationWindow | 템포의 일부로 간주되기 위해 연속적으로 활성화되는 감정 표현 사이의 시간입니다(단위: 초). | 3 |
lockedImage | 표시할 이미지가 잠긴 감정 표현 위에 표시됩니다. | "rbxassetid://6905802778" |
EmoteBar
키 | 설명 | 기본 |
---|---|---|
maxEmotesPerPage | 한 번에 표시되는 감정 표현의 최대 개수입니다. 화면이 작으면 자동으로 감정 표현이 더 적게 표시됩니다. | 4 |
emoteBarPosLandscape | 가로 모드에서 감정 표현 표시줄의 위치입니다(UDim2). | (0.5, 0, 1, -16) |
emoteBarPosPortrait | 세로 모드에서 감정 표현 표시줄의 위치입니다(UDim2). | (0.5, 0, 1, -100) |
useEmoteHotkeys | 감정 표현 핫키를 사용할지 여부입니다. true인 경우, 감정 표현 표시줄의 핫키로 1, 2, 3, 4 등을 바인딩합니다. 1~9의 숫자키만 지원됩니다. | true |
usePageHotkeys | 페이지 핫키를 사용할지 여부입니다. true인 경우, 페이지 간에 순환하는 데 nextPageKey 및 prevPageKey가 사용됩니다. | true |
prevPageKey | 이전 페이지의 감정 표현으로 돌아가는 데 사용되는 키입니다(Enum.KeyCode). | Q |
nextPageKey | 다음 페이지의 감정 표현으로 넘어가는 데 사용되는 키입니다(Enum.KeyCode). | E |
leftArrowImage | 왼쪽 화살표에 대한 이미지입니다(이전 페이지). | "rbxassetid://6998633654" |
rightArrowImage | 오른쪽 화살표에 대한 이미지입니다(다음 페이지). | "rbxassetid://6998635824" |
EmoteWheel
키 | 설명 | 기본 |
---|---|---|
closeImage | 감정 표현 휠의 닫기 버튼에 대한 이미지로, closeBackgroundImage 이미지 위에 놓입니다. | "rbxassetid://7027440823" |
closeBackgroundImage | 감정 표현 휠의 닫기 버튼에 대한 배경 이미지입니다. | "rbxassetid://7027440823" |
emoteHoverImage | 휠에서 선택된 감정 표현 위로 마우스를 가져갔을 때 나타나는 내용을 위한 이미지입니다. | "rbxassetid://7344843157" |
LocalScript - Emote Bar
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.configureClient({guiType = EmoteBar.GuiType.EmoteBar,maxEmotesPerPage = 6,nextPageKey = Enum.KeyCode.Z,prevPageKey = Enum.KeyCode.C,})
LocalScript - Emote Wheel
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.configureClient({guiType = EmoteBar.GuiType.EmoteWheel,})
setEmotes
setEmotes(emotes:table):nil
사용하려는 사용자 지정 감정 표현을 설정합니다. useDefaultEmotes가 true이면 이러한 감정 표현이 기본값에 추가되고, useDefaultEmotes가 false이면 기본값을 대체합니다. 이 함수는 Script에서만 호출되며 변경 사항은 자동으로 모든 클라이언트에 복제됩니다.
이 함수에 전달되는 각 감정 표현의 구조를 보려면 감정 표현을 참조해 주세요.
Script - ConfigureEmotes
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.configureServer({useDefaultEmotes = false,})EmoteBar.setEmotes({{name = "Hello",animation = "rbxassetid://3344650532",image = "rbxassetid://7719817462",defaultTempo = 1,},{name = "Applaud",animation = "rbxassetid://5915693819",image = "rbxassetid://7720292217",defaultTempo = 2,},})
setGuiVisibility
setGuiVisibility(visible:boolean):nil
감정 표현 GUI를 표시하거나 숨깁니다. 이 함수는 특정 클라이언트의 LocalScript에서만 호출될 수 있습니다.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.setGuiVisibility(false)
getEmote
getEmote(emoteName:string):table
이름으로 감정 표현을 가져옵니다. 감정 표현이 검색되지 않으면 nil을 반환합니다. 이 함수는 특정 클라이언트의 LocalScript에서만 호출될 수 있습니다.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))local shrug = EmoteBar.getEmote("Shrug")
playEmote
playEmote(emote:Emote):nil
제공된 감정 표현을 플레이하고 연결된 경우 서버에서 emotePlayed 이벤트를 발생시킵니다. 이 함수는 특정 클라이언트의 LocalScript에서만 호출될 수 있습니다.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))local shrug = EmoteBar.getEmote("Shrug")EmoteBar.playEmote(shrug)
lockEmote
lockEmote(emoteName:string):nil
제공된 이름으로 감정 표현을 잠급니다. 이 함수는 클라이언트의 LocalScript에서만 호출될 수 있습니다.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.lockEmote("Applaud")
unlockEmote
unlockEmote(emoteName:string):nil
제공된 이름으로 감정 표현 잠금을 해제합니다. 이 함수는 클라이언트의 LocalScript에서만 호출될 수 있습니다.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))EmoteBar.unlockEmote("Applaud")
이벤트
emotePlayed
emotePlayed(player:Player, emote:Emote): RBXScriptSignal
어떤 클라이언트든 감정 표현을 플레이하면 발생합니다. 해당 이벤트는 LocalScript에서만 연결할 수 있습니다.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))
EmoteBar.emotePlayed:Connect(function(player, emote)
print(player.Name, "played", emote.name)
end)
lockedEmoteActivated
lockedEmoteActivated(emote:Emote): RBXScriptSignal
클라이언트가 잠긴 감정 표현을 클릭하면 발생합니다. 해당 이벤트는 LocalScript에서만 연결할 수 있습니다.
매개변수 | |
---|---|
emote: Emote | 활성화된 잠긴 감정 표현입니다. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local EmoteBar = require(ReplicatedStorage:WaitForChild("EmoteBar"))
EmoteBar.lockedEmoteActivated:Connect(function(emote)
print(Players.LocalPlayer, "clicked", emote.name)
end)