In 코드 재사용, 당신은 game:GetService() 메서드의 빈번한 사용을 발견했을 것입니다. Roblox 서비스는 게임 내 아이템 판매, 채팅 활성화, 소리 재생, 객체 애니메이션, 인스턴스 관리와 같은 엔진의 내장 기능에 접근할 수 있게 해줍니다.
사실, 서비스는 Roblox 개발의 가장 기본적이고 일반적인 패턴의 첫 번째 단계입니다:
- 서비스 가져오기.
- 모듈 스크립트 요구.
- 로컬 함수 추가.
- 이러한 함수를 트리거하는 이벤트 추가.
예를 들어, 당신은 플레이어가 게임을 종료할 때 플레이어의 위치를 저장하고 싶을 수 있습니다:
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
-- 모듈 스크립트에서 재사용 가능한 함수를 호출하는 로컬 함수.
local function saveProgress(character)
-- 플레이어의 캐릭터 위치를 가져옵니다.
local position = character:FindFirstChild("HumanoidRootPart").Position
-- DataStoreService에 쓰는 모듈 스크립트의 saveData 함수를 사용합니다.
SaveManager.saveData(character, position)
end
-- 캐릭터가 게임에서 제거될 때 saveProgress()를 호출하는 또 다른 로컬 함수
-- (이 경우에는 플레이어가 나갈 때).
local function onPlayerAdded(player)
player.CharacterRemoving:Connect(saveProgress)
end
-- 플레이어가 게임에 처음 연결될 때 onPlayerAdded를 호출합니다.
Players.PlayerAdded:Connect(onPlayerAdded)
몇 가지 주요 사항은 다음과 같습니다:
- 서비스는 스크립트당 한 번만 가져와야 하므로, 관습적으로 변수를 서비스와 동일한 이름으로 줍니다. 이 관습은 모듈 스크립트에도 적용됩니다.
- 서비스를 가져오는 데는 전역 변수 game을 사용합니다. 이는 데이터 모델의 루트를 참조합니다.
- Roblox는 로딩 순서에 대한 보장을 하지 않으므로 (그리고 인스턴스 스트리밍은 특정 시간에 무엇이 로드되었고 무엇이 로드되지 않았는지를 더욱 복잡하게 만듭니다), Instance:WaitForChild()를 사용하는 것이 중요한 안전 조치입니다.
표준 라이브러리, 전역 함수 및 변수, 또는 서드파티 라이브러리를 비교하는 것 대신, Roblox 개발의 큰 부분은 많은 서비스 중에서 어떤 것이 원하는 기능을 게임에 추가하는 데 도움을 줄 수 있는지를 식별하는 것입니다. 위의 예제에서는 디스크에 쓰기 위해 표준 I/O 라이브러리를 사용하는 대신, 데이터를 저장하기 위해 클라우드 서비스를 사용합니다.
컨테이너 서비스
컨테이너 서비스는 다른 객체를 포함하고 영향을 미칠 수 있습니다. 이러한 컨테이너 서비스는 데이터 모델의 루트에 있으며 Studio의 탐색기 창에서 표시됩니다. 이러한 컨테이너 서비스는 데이터 모델을 위한 구조적 계층을 형성하여 Roblox 엔진이 장소를 적절하게 해석하고 렌더링할 수 있도록 합니다. 다음 표에는 몇 가지 일반적인 컨테이너 서비스가 포함되어 있습니다.
| 서비스 | 설명 |
|---|---|
| Workspace | 3D 세계에서 렌더링되는 모든 객체(예: 파트 및 지형)를 포함합니다. |
| Lighting | Atmosphere 및 Sky와 같은 보편적인 조명 효과를 설정하기 위한 객체를 포함합니다. |
| ReplicatedStorage 및 ReplicatedFirst | 서버와 클라이언트 간에 복제되는 콘텐츠와 로직을 포함합니다. |
데이터 모델을 더 자세히 살펴보려면 다음 메서드를 사용할 수 있습니다:
- game:FindService()는 지정된 서비스의 인스턴스를 검색합니다.
- game:GetChildren()은 데이터 모델의 모든 루트 자식을 포함하는 배열을 반환합니다. 이는 최상위 컨테이너 서비스입니다.
- game:GetDescendants()은 데이터 모델의 모든 자손을 포함하는 배열을 반환하며, 모든 컨테이너 서비스 및 그 자식을 포함합니다.
컨테이너 서비스에 대한 자세한 정보는 데이터 모델 문서를 참조하십시오.
스크립팅 서비스
스크립팅 서비스는 스크립트 내에서 호출하는 Roblox 엔진의 표준 기능을 제공합니다. 다음 표에는 몇 가지 일반적인 스크립팅 서비스가 포함되어 있습니다.
| 서비스 | 설명 |
|---|---|
| TweenService | 다른 인스턴스의 수치 속성을 시작 값에서 끝 값으로 보간하는 데 사용되며, 이징 방향 및 스타일, 반복 및 지연 옵션을 설정할 수 있습니다. |
| MarketplaceService | 플레이어에게 개발자 제품, 구독, 패스, Roblox 프리미엄 등을 구매하도록 유도하는 등 게임 내 거래를 담당하는 서비스입니다. |
| RunService | 프레임별 시간 관리를 위한 방법과 이벤트를 포함하며, 게임이 실행되고 있는 컨텍스트(서버, 클라이언트, 스튜디오 모드)를 확인하는 데 유용합니다. 모든 런타임 프레임에서 프로세스나 업데이트를 실행하는 데 유용합니다. |
| SoundService | 게임에서 오디오가 재생되는 방식의 다양한 글로벌 측면을 제어하며, 도플러 스케일 및 볼륨적 오디오와 같은 기능을 포함합니다. 또한 여러 오디오 신호의 볼륨 및 동적 효과 속성을 한 번에 제어하기 위한 사운드 그룹을 포함할 수도 있습니다. |
| CollectionService | 태그가 있는 인스턴스의 그룹(컬렉션)을 관리하며, 이는 서버에서 클라이언트로 복제되어 관련 인스턴스 그룹을 더 쉽게 지정하고 작업할 수 있게 해줍니다. |
클라우드 서비스
Roblox는 또한 Roblox 클라우드에서 발생하는 작업 및 프로세스를 처리하기 위한 특별한 클라우드 서비스를 제공합니다. 다음 표에는 몇 가지 일반적인 클라우드 서비스가 포함되어 있습니다.
| 서비스 | 설명 |
|---|---|
| DataStoreService | 세션 간 지속적인 데이터를 저장하기 위한 것입니다. |
| MemoryStoreService | 빠르게 변화하는 빈번하고 덧없는 데이터를 저장하기 위한 것입니다. |
| MessagingService | 라이브 세션 동안 여러 서버 간의 통신을 위한 것입니다. |
클라우드 서비스는 외부 스크립트나 도구에서 접근할 수 있는 해당 웹 API도 가지고 있습니다. 자세한 내용은 Open Cloud를 참조하십시오.