Em Reutilizar código, você pode ter notado o uso frequente do método game:GetService(). Os serviços do Roblox permitem acessar os recursos integrados do motor, como vender itens do jogo, habilitar chat, tocar sons, animar objetos e gerenciar instâncias.
Na verdade, os serviços são o primeiro passo no padrão fundamental e comum de desenvolvimento do Roblox:
- Obter serviços.
- Requerer scripts de módulo.
- Adicionar funções locais.
- Adicionar os eventos que disparam essas funções.
Por exemplo, você pode querer salvar as posições dos jogadores no mundo quando eles saem do seu jogo:
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
-- Função local que chama uma função reutilizável no script de módulo.
local function saveProgress(character)
-- Obter a posição do personagem do jogador.
local position = character:FindFirstChild("HumanoidRootPart").Position
-- Usar a função saveData no script de módulo, que grava no
-- DataStoreService.
SaveManager.saveData(character, position)
end
-- Outra função local que chama saveProgress() quando um personagem é removido
-- do jogo (neste caso, quando o jogador sai).
local function onPlayerAdded(player)
player.CharacterRemoving:Connect(saveProgress)
end
-- Chama onPlayerAdded quando um jogador se conecta ao jogo pela primeira vez.
Players.PlayerAdded:Connect(onPlayerAdded)
Alguns detalhes importantes incluem:
- Como você deve recuperar um serviço apenas uma vez por script, a convenção é dar à variável o mesmo nome que o serviço. Essa convenção se aplica também aos scripts de módulo.
- Você recupera serviços com a variável global game, uma referência à raiz do modelo de dados.
- O Roblox não garante uma ordem de carregamento (e streaming de instâncias complica ainda mais o que está e o que não está carregado em um determinado momento), então o uso de Instance:WaitForChild() é uma medida de segurança importante.
Em vez de comparar bibliotecas padrão, funções e variáveis globais, ou bibliotecas de terceiros, uma grande parte do desenvolvimento no Roblox é identificar quais dos muitos serviços disponíveis podem ajudá-lo a adicionar a funcionalidade desejada aos seus jogos. No exemplo acima, em vez de usar uma biblioteca de I/O padrão para gravar no disco, você usa serviços em nuvem para armazenar dados.
Serviços de contêiner
Os serviços de contêiner podem conter e influenciar outros objetos. Esses serviços de contêiner residem na raiz do modelo de dados e são visíveis na janela Explorer do Studio. Coletivamente, esses serviços de contêiner formam uma hierarquia estruturada para o modelo de dados, para que o Roblox Engine possa interpretar e renderizar seu lugar adequadamente. A tabela a seguir inclui alguns serviços de contêiner comuns.
| Serviço | Descrição |
|---|---|
| Workspace | Contém todos os objetos que são renderizados no mundo 3D, como partes e terrenos. |
| Lighting | Contém objetos para definir efeitos de iluminação universal, como Atmosphere e Sky. |
| ReplicatedStorage e ReplicatedFirst | Contêm conteúdo e lógica que se replicam entre o servidor e o cliente. |
Para examinar mais a fundo o modelo de dados, você pode usar esses métodos:
- game:FindService() busca a instância do serviço especificado.
- game:GetChildren() retorna um array de todos os filhos raiz do modelo de dados, que são os serviços de contêiner de nível superior.
- game:GetDescendants() retorna um array de todos os descendentes do modelo de dados, incluindo todos os serviços de contêiner e seus filhos.
Para mais informações sobre serviços de contêiner, consulte a documentação do modelo de dados.
Serviços de script
Os serviços de script fornecem funcionalidade padrão no Roblox Engine que você chama dentro de scripts. A tabela a seguir inclui alguns serviços de script comuns.
| Serviço | Descrição |
|---|---|
| TweenService | Usado para interpolar propriedades numéricas de outras instâncias de um valor inicial a um valor final, com opções para direção e estilo de suavização, repetição e atraso. |
| MarketplaceService | O serviço responsável por transações no jogo, como solicitar ao jogador que compre um produto do desenvolvedor, assinatura, passe, Roblox Premium, etc. |
| RunService | Contém métodos e eventos para gerenciamento de tempo quadro a quadro, bem como para verificar o contexto (servidor, cliente, modo Studio) em que o jogo está sendo executado. Útil para executar qualquer processo ou atualização em cada quadro de execução. |
| SoundService | Controla vários aspectos globais de como o áudio toca em um jogo, como a escala doppler e áudio volumétrico. Também pode conter grupos de som para controlar as propriedades de volume e efeitos dinâmicos de múltiplos sinais de áudio ao mesmo tempo. |
| CollectionService | Gerencia grupos (coleções) de instâncias com tags que se replicam do servidor para o cliente, permitindo que você atribua e trabalhe mais facilmente com grupos de instâncias relacionadas. |
Serviços em nuvem
O Roblox também possui serviços em nuvem especiais para lidar com tarefas e processos que ocorrem na nuvem do Roblox. A tabela a seguir inclui alguns serviços em nuvem comuns.
| Serviço | Descrição |
|---|---|
| DataStoreService | Para armazenar dados persistentes entre sessões. |
| MemoryStoreService | Para armazenar dados frequentes e efêmeros que mudam rapidamente. |
| MessagingService | Para comunicar entre vários servidores durante sessões ao vivo. |
Os serviços em nuvem também têm APIs web correspondentes; elas são acessíveis a partir de scripts ou ferramentas externas. Para mais informações, consulte Open Cloud.