Tutoriais intermediários

Controle a câmera do usuário

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

A visão do usuário sobre o mundo é representada por um objeto Camera. Você pode alterar o comportamento da câmera para se adequar à sua experiência de várias maneiras. Por exemplo, a câmera pode reagir a eventos no mundo, como tremer quando um monstro passa, ou ficar presa ao lado do personagem do usuário, como em um side-scroller.

Criar uma câmera em primeira pessoa

Uma câmera em primeira pessoa é uma visão onde a câmera fica presa à cabeça do personagem, o que é mais preciso em relação à vida real. É comum em experiências de tiro e histórias onde o objetivo é fazer o usuário se sentir imerso no mundo.

Câmera em Primeira Pessoa
Câmera Clássica do Roblox

No Studio, o objeto StarterPlayer contém várias propriedades que afetam a câmera do usuário. A propriedade CameraMode determina como a câmera se comporta.

  1. Selecione StarterPlayer.

    alt

  2. Altere CameraMode para LockFirstPerson. Isso garante que a câmera do usuário não se afaste de sua cabeça.

    alt

  3. Teste para ver a câmera em primeira pessoa em ação.

Criar uma câmera de rolagem lateral

Uma visão de rolagem lateral mantém a câmera em uma posição fixa em relação ao lado do personagem, dando ao mundo uma sensação bidimensional.

alt

Script para a câmera

  1. Expanda StarterPlayer e, em StarterPlayerScripts, adicione um LocalScript chamado CameraManager.

    alt

  2. No topo do script, copie e cole o seguinte código para obter o serviço Players, e então em uma nova variável obtenha o usuário local.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. Crie uma função chamada updateCamera. Isso contém a lógica necessária para obter e definir uma nova posição para a câmera.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. Dentro da função, obtenha o modelo do personagem do usuário e verifique se ele existe usando uma instrução if.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

Apontar a câmera

Todos os modelos de personagem contêm uma parte chamada HumanoidRootPart, que pode ser usada para obter a posição do personagem no mundo. Isso define a posição para a qual a câmera aponta.

  1. Use FindFirstChild para obter o HumanoidRootPart e verifique se ele existe usando uma instrução if.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    end
    end
    end
  2. A posição do HumanoidRootPart é na verdade 2 studs abaixo da cabeça do usuário. Para corrigir isso, adicione um novo Vector3 com uma altura de 2 studs à posição do root.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local HEIGHT_OFFSET = 2
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    end
    end
    end

Definir a posição da câmera

A câmera também precisa de uma posição. Para dar à visão do usuário um visual de rolagem lateral em 2D, a câmera precisa olhar diretamente para o lado do personagem. Coloque a câmera ao lado do usuário adicionando profundidade apenas ao Eixo Z da posição da câmera usando um Vector3.


local player = Players.LocalPlayer
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
end
end
end

Atualizar CurrentCamera

Agora que as variáveis para a posição da câmera e o alvo da câmera estão prontas, é hora de atualizar a posição da câmera. Você pode acessar a câmera do usuário através da propriedade CurrentCamera do Workspace. A câmera possui uma propriedade CFrame para determinar sua posição.

Você pode usar CFrame.lookAt() para atualizar a câmera. Ele recebe duas posições e cria um CFrame localizado na primeira posição apontando para a segunda. Use CFrame.lookAt() para criar um CFrame que está posicionado em cameraPosition e apontado para rootPosition.


local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
end

Sincronizar a câmera

A última etapa é executar essa função repetidamente para manter a câmera em sincronia com o usuário. A imagem que o usuário vê está constantemente se atualizando. O breve momento que leva para realizar todos os cálculos necessários é chamado de etapa de renderização.

RunService:BindToRenderStep() torna simples executar uma função a cada quadro, aceitando esses três parâmetros:

  • name - O nome dessa ligação, que deve ser único para não colidir com outras funções com o mesmo nome.
  • priority - Quanto maior o número, maior a prioridade. Esta função deve ser executada depois da atualização padrão da câmera do Roblox, então a prioridade é definida para 1 nível acima da RenderPriority interna da câmera.
  • function - A função que será vinculada à etapa de renderização.
  1. Use RunService:BindToRenderStep() para vincular a função updateCamera à etapa de renderização.


    local Players = game:GetService("Players")
    local RunService = game:GetService("RunService")
    local player = Players.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 24
    local HEIGHT_OFFSET = 2
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. Teste seu código. Use as teclas A e D para mover seu personagem de lado.

Criar uma câmera isométrica

A estrutura básica de obter a posição do usuário e atualizar a posição da câmera a cada quadro pode ser adaptada a muitos outros estilos de câmera, como uma câmera isométrica. Uma câmera isométrica é uma visão 3D apontando ligeiramente para baixo em um ângulo fixo em direção ao personagem do usuário.

alt

Modificar posição e visão

  1. Usando o código do exemplo anterior, modifique cameraPosition para adicionar a mesma quantidade a todas as 3 dimensões.

    alt


    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    local cameraPosition = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. Alterar a propriedade FieldOfView da câmera simula o zoom para dentro e para fora, o que pode dar à visão um aspecto mais achatado. Tente definir para um valor de 20 para aumentar o zoom e aumentar a distância da câmera em relação ao usuário para compensar.


    local Players = game:GetService("Players")
    local RunService = game:GetService("RunService")
    local player = Players.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local function updateCamera()

Alterando o comportamento da câmera, você pode conseguir uma aparência completamente nova para sua experiência. Veja se você consegue mudar a cameraPosition para alcançar uma câmera de cima para baixo com o mesmo script. Tente ajustar as configurações para obter um resultado que você goste!

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.