Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Cena do Jogador e ações de entrada

Nas próximas duas lições, projetaremos a cena do jogador, registraremos ações de entrada personalizadas e codificaremos o movimento do jogador. Ao final, você terá um personagem jogável que se move em oito direções.

Crie uma nova cena acessando o menu Scene no canto superior esquerdo e clicando em New Scene.

../../_images/new_scene.webp

Clique no botão Outro Nó e selecione o tipo de nó CharacterBody3D para criar um CharacterBody3D como nó raiz.

../../_images/add_character_body3D.webp

Renomeie o CharacterBody3D para Player. Corpos de personagens (Character bodies) são complementares aos corpos de área e rígidos usados no tutorial do jogo 2D. Assim como os corpos rígidos, eles podem se mover e colidir com o ambiente, mas, em vez de serem controlados pelo motor de física, você dita o movimento deles. Você verá como usamos os recursos exclusivos do nó quando codificarmos as mecânicas de pulo e esmagamento.

Ver também

Para aprender mais sobre os diferentes tipos de nodos físicos, veja Introdução à física.

Por enquanto, vamos criar um rig básico para o modelo 3D do nosso personagem. Isso nos permitirá girar o modelo posteriormente via código enquanto ele reproduz uma animação.

Adicione um nó Node3D como filho do nó Jogador. Selecione o nó Jogador na árvore de Cenas e clique no botão "+" para adicionar um nó filho. Renomeie o nó para Pivô.

../../_images/adding_node3D.webp

Em seguida, na aba FileSystem, expanda a pasta art/ com um duplo clique e arraste e solte player.glb sobre o Pivot.

../../_images/instantiating_the_model.webp

Isso deve instanciar o modelo como um filho de Pivot. Você pode renomeá-lo para Character.

../../_images/scene_structure.webp

Nota

Os arquivos .glb contêm dados de cenas 3D baseados na especificação aberta glTF 2.0. Eles são uma alternativa moderna e poderosa a formatos proprietários como FBX, que o Godot também suporta. Para produzir esses arquivos, projetamos o modelo no Blender 3D e o exportamos para glTF.

Assim como com todos os tipos de nós de física, precisamos de uma forma de colisão para o nosso personagem colidir com o ambiente. Selecione o nó Player novamente e adicione um nó filho CollisionShape3D. No Inspector, na propriedade Shape, adicione um novo SphereShape3D.

../../_images/add_capsuleshape3d.webp

O wireframe da esfera aparece abaixo do personagem.

../../_images/sphere_shape.png

Essa será a forma que o mecanismo de física utilizará para colisões com o ambiente, então queremos que ela se ajuste melhor ao modelo 3D. Aumente-a um pouco arrastando o ponto laranja na viewport. Minha esfera possui um raio de aproximadamente 0.8 metros.

Em seguida, mova a forma de colisão para cima para que sua base fique aproximadamente alinhada com o plano da grade.

../../_images/moving_the_sphere_up.png

Para facilitar a movimentação da forma, você pode alternar a visibilidade do modelo clicando no ícone de olho ao lado dos nós Character ou Pivot.

../../_images/toggling_visibility.webp

Salve a cena como Jogador.tscn.

Com os nós prontos, podemos quase começar a codificar. Mas primeiro, precisamos definir algumas ações de entrada.

Criando ações de entrada

Para mover o personagem, vamos escutar a entrada do jogador, como pressionar as teclas de seta. Em Godot, embora possamos escrever todas as combinações de teclas em código, há um sistema poderoso que permite atribuir um rótulo a um conjunto de teclas e botões. Isso simplifica nossos scripts e os torna mais legíveis.

Esse sistema é o Input Map (Mapa de Entrada). Para acessar o seu editor, vá ao menu Project e selecione Project Settings....

../../_images/project_settings.webp

No topo, existem várias abas. Clique em Input Map. Essa janela permite adicionar novas ações no topo; elas são os seus rótulos. Na parte inferior, você pode vincular teclas a essas ações.

../../_images/input_map_tab.webp

Os projetos do Godot vêm com algumas ações predefinidas projetadas para o design de interface do usuário (veja a captura de tela acima). Elas se tornarão visíveis se você ativar a opção Show Built-in Actions. Poderíamos usá-las aqui, mas, em vez disso, vamos definir as nossas próprias para suportar gamepads. Deixe Show Built-in Actions desativado.

Vamos nomear nossas ações move_left, move_right, move_forward, move_back e jump.

Para adicionar uma ação, digite o nome dela na barra no topo e pressione Enter ou clique no botão Add (Adicionar).

../../_images/adding_action.webp

Crie as cinco ações a seguir:

../../_images/actions_list_empty.webp

Para vincular uma tecla ou botão a uma ação, clique no botão "+" à sua direita. Faça isso para move_left. Pressione a tecla de seta para a esquerda e clique em OK.

../../_images/left_inputmap.webp

Atribua também a tecla A, para a ação move_left.

../../_images/keyboard_keys.webp

Vamos agora adicionar suporte para o analógico esquerdo de um gamepad. Clique no botão "+" novamente, mas desta vez, selecione você mesmo a entrada dentro da árvore de entradas. Selecione o eixo X negativo do analógico esquerdo sob Joypad Axes.

../../_images/joystick_axis_input.webp

Deixe os outros valores como padrão e pressione OK.

Nota

Se você quiser que os joysticks tenham diferentes ações de entrada, você deve usar a opção Dispositivos em Opções Adicionais. O dispositivo 0 corresponde ao primeiro gamepad plugado, o dispositivo 1 corresponde ao segundo gamepad plugado, e assim por diante.

Faça o mesmo para as outras ações de entrada. Por exemplo, associe a seta para a direita, a tecla D e o eixo positivo do analógico esquerdo à ação move_right. Após associar todas as teclas, sua interface deverá se parecer com isto.

../../_images/move_inputs_mapped.webp

A última ação a ser configurada é a ação jump. Vincule a tecla Espaço e o botão A do gamepad localizado sob Joypad Buttons.

../../_images/joy_button_option.webp

Sua ação de entrada de salto deve se parecer com isso.

../../_images/jump_input_action.webp

Essas são todas as ações que precisamos para este jogo. Você pode usar este menu para rotular quaisquer grupos de teclas e botões em seus projetos.

Na próxima parte, nós iremos programar e testar o movimento do jogador.