Módulo 9 · Aula 9.4 · Câmera em terceira pessoa
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 8 h/a | ⭐⭐⭐ | Godot 4.7 | C2, C3 |
Objetivos de aprendizagem
- Diferenciar câmera em primeira pessoa, terceira pessoa e vista de cima.
- Montar uma câmera que segue o personagem com
SpringArm3D. - Ajustar distância, inclinação e campo de visão até o jogo ficar jogável.
- Explicar por que o braço precisa ignorar o próprio jogador.
Pré-requisitos
Aula 9.3.
Materiais
Godot 4.7; chave-da-porteira (cenas/jogador.tscn, nó Braco).
Conceitos
Tipos de câmera.
| Câmera | Onde fica | Bom para |
|---|---|---|
| primeira pessoa | nos olhos do personagem | sentir que é você ali dentro |
| terceira pessoa | atrás e acima do personagem | ver o personagem e o caminho |
| vista de cima | bem alto, olhando para baixo | estratégia, labirintos simples |
O Chave da Porteira usa terceira pessoa bem alta, quase de cima: num labirinto, o jogador precisa ver o corredor.
Câmera filha do jogador. Se a câmera for filha do jogador, ela anda e gira junto, sem nenhuma linha de código.
Braço de mola (SpringArm3D). É um "pau de selfie" com mola. A câmera fica na ponta. Se aparecer uma parede entre o jogador e a câmera, o braço encolhe para a câmera não ficar atrás da parede; quando o caminho abre, ele estica de novo. O braço estica no seu Z positivo (para trás).
Os números do Chave da Porteira. Eles não saíram de fórmula: saíram de testar e olhar a tela. Na preparação do curso foram cinco tentativas, cada uma com uma foto do jogo:
| Tentativa | Problema visto na foto | O que mudou |
|---|---|---|
| braço de 4 m, 20°, corredor de 2 m | câmera colada no chapéu | corredores de 3 m (TAMANHO), braço mais longo |
| braço de 5 m, 43° | a parede de trás tampava metade da tela | mais altura e mais inclinação |
| braços de 6 a 8 m, de 51° a 66°, origem no jogador | ainda sobrava parede de trás na parte de baixo | mudar a origem do braço |
| braço de 8 m, 66°, origem 2,5 m à frente | câmera quase em cima: só se via o chapéu | menos inclinação, origem mais perto |
| braço de 8 m, 54°, origem 1,5 m à frente | personagem embaixo e o caminho à frente visível | ficou |
Pôr a origem do braço à frente do personagem faz a câmera mirar o caminho, e não a cabeça dele.
Campo de visão (fov). Quanto do mundo cabe na tela, em graus. O padrão é 75; o jogo usa 50, como uma lente que "aproxima".
O braço bate no próprio jogador. O braço procura obstáculos com um raio. O primeiro obstáculo que ele acha é... a cápsula do próprio jogador. Por isso o script faz braco.add_excluded_object(get_rid()). O teste automático confere isso: com a linha, o braço fica em 8 m; com um teto colocado no caminho, encolhe; tirando o teto, volta a 8 m.
Exemplos
Propriedade do SpringArm3D | Valor no jogo |
|---|---|
Position | (0, 1.5, -1.5): altura do peito, 1,5 m à frente |
Rotation X | -54,4° (o Inspetor mostra em graus; no arquivo fica -0,95 radiano) |
Spring Length | 8 m |
Margin | 0,2 m |
Camera3D → Fov | 50 |
Tutorial passo a passo
Parte A. Ver o braço (40 min)
- Abra
jogador.tscne selecioneBraco. No Inspetor, confira os valores da tabela. - Selecione
Camerae marque Visualização no alto da janela 3D: é o que o jogador vê.
Parte B. Montar no seu personagem (120 min)
- No seu
Jogador(Aula 9.3), Adicionar Nó Filho... →SpringArm3D(Braco); dentro dele,Camera3D(Camera). - Ajuste
Position,RotationX eSpring Lengthaté ver o personagem e o chão à frente. - Escreva no
_readya linhabraco.add_excluded_object(get_rid()).
Parte C. Experimentos (140 min)
- Tire a linha do passo 5 e execute: a câmera vai parar colada no personagem. Ponha de volta.
- Faça três versões e jogue cada uma por 2 minutos, num corredor com curvas:
- primeira pessoa: braço com
Spring Length0 e câmera na altura da cabeça; - terceira pessoa baixa: 4 m e -20°;
- a do jogo: 8 m e -54°.
- primeira pessoa: braço com
- Anote no diário qual foi mais fácil, qual deu mais medo e qual bateu mais na parede.
Imagens
../../../recursos/imagens/godot/captura-godot3d-jogador-braco.png
: o Bracoselecionado, comSpring Length8 m,Margin0,2 m e a rotação de -54,4°.../../../recursos/imagens/godot/chave-da-porteira-tela-chave.png
: a vista do jogo, com o caminho à frente.
Indicação da interface
| Item | Nome na tela |
|---|---|
| braço | nó SpringArm3D; propriedades Collision Mask, Shape, Spring Length, Margin (em inglês) |
| ver pela câmera | opção Visualização com a câmera selecionada |
| campo de visão | Camera3D → Fov |
O código completo
cenas/jogador.tscn, trecho do braço e da câmera (arquivo de texto da cena):
[node name="Braco" type="SpringArm3D" parent="."]
position = Vector3(0, 1.5, -1.5)
rotation = Vector3(-0.95, 0, 0)
spring_length = 8.0
margin = 0.2
[node name="Camera" type="Camera3D" parent="Braco"]
current = true
fov = 50.0E, no jogador.gd:
func _ready() -> void:
# Sem esta linha, o braço da câmera "bate" no próprio corpo do jogador e encolhe.
braco.add_excluded_object(get_rid())Explicação do código
get_rid()é a "identidade" do corpo do jogador no motor de física. O braço passa a ignorá-lo.current = truediz que esta é a câmera do jogo (pode haver várias na cena).- A rotação no arquivo é em radianos (-0,95); o Inspetor mostra em graus (-54,4°).
Resultado esperado
Câmera que segue o personagem, encolhe quando há parede no caminho e mostra o corredor à frente.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| câmera colada no personagem | braço batendo no próprio jogador | add_excluded_object(get_rid()) |
| só se vê o chapéu | inclinação demais e origem no centro do jogador | menos inclinação ou origem à frente |
| parede tapa a tela | câmera baixa demais | subir a inclinação |
| tela "treme" ao passar rente à parede | braço encolhe e estica de repente | aumentar Margin ou deixar a câmera mais alta que as paredes |
| câmera olha para o lado errado | Camera3D girada dentro do braço | zerar a rotação da câmera; quem gira é o braço |
Exercício guiado
Por que a câmera é filha do braço, e o braço filho do jogador, em vez de a câmera ser filha direta do jogador? (Resposta: o braço é que sabe encolher quando há parede; a câmera vai na ponta dele.)
Desafio individual
Faça a tecla C alternar entre a câmera alta do jogo e uma de primeira pessoa (mudando spring_length e rotation do braço pelo código).
Desafio avançado (opcional)
Faça a câmera girar em volta do jogador com o mouse (InputEventMouseMotion), girando só o braço.
Critérios de avaliação
- Câmera em terceira pessoa funcionando no próprio personagem.
- Explica o braço de mola e a exclusão do jogador.
- Diário com a comparação das três câmeras.
Checklist de conclusão
Extensão
Escolha um jogo que você conhece e descreva a câmera dele: onde fica, o que ela mostra e o que esconde.