O percurso
Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 49 de 60.
Este capítulo cria um jogo de plataforma 3D. Você corre e pula entre plataformas flutuantes, anda em uma que desliza, toca em pontos de controle para que uma queda não faça você voltar ao início, coleta gemas contabilizadas na tela, cruza a linha de chegada para passar ao próximo nível e tenta bater seu melhor tempo. O jogo tem cinco scripts, que já estão no projeto desde o início: Player, MovingPlatform, Checkpoint, Gem e FinishLine. Os quatro últimos estão vazios por enquanto, e cada lição preenche um deles. O jogador é um CharacterController controlado pelas ações do Input System, e a câmera é filha dele, então ela o acompanha sem precisar de um script.
Um CharacterController se move de duas maneiras. Move(motion) o desloca por uma distância e não acrescenta nada, então a gravidade, os pulos e Time.deltaTime ficam por conta do script, como no capítulo sobre Character Controller. SimpleMove(speed) recebe uma velocidade em unidades por segundo, ajusta essa velocidade pelo tempo do próprio quadro e acrescenta gravidade; ele ignora o valor de y que você passa, então um personagem movido com ele cai de plataformas, mas nunca pode pular. Este cão pastor de um jogo de pastoreio visto de cima não precisa pular, então SimpleMove e a ação Move são tudo de que o script precisa:
using UnityEngine;
using UnityEngine.InputSystem;
public class Sheepdog : MonoBehaviour
{
[SerializeField] private float speed = 6f;
private CharacterController controller;
private InputAction moveAction;
void Start()
{
controller = GetComponent<CharacterController>();
moveAction = InputSystem.actions.FindAction("Move");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
}
}O jogador do jogo de plataforma precisa pular, então mantém sua própria velocidade vertical e se move com Move, lendo as ações Move e Jump em vez da classe Input. A Unity recomenda uma chamada a Move ou SimpleMove por quadro: o deslocamento horizontal e a queda são combinados na mesma chamada, e isGrounded descreve então todo esse movimento.
Desafio
MédioFaça o jogador andar, pular e cair.
- Em
Start(), encontreMoveeJumpcomInputSystem.actions.FindAction. - Em
Update(), ande comspeed: o x de Move ao longo do x, o y ao longo do z. - Adicione
gravity * Time.deltaTimeavelocity.y, e-2fenquanto estiver no chão e caindo. Ao pular, enquanto estiver no chão, defina-o comoMathf.Sqrt(jumpHeight * -2f * gravity). - Chame
controller.Move((move + velocity) * Time.deltaTime)uma vez.
Pressione “Jogar”: pule até a primeira plataforma. Depois, “Verificar”.
Experimente você mesmo
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private float jumpHeight = 1.5f;
[SerializeField] private float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// ande com a ação Move, pule com a ação Jump e caia pela ação da gravidade
}
}
Todas as lições de Criando Jogos de Verdade
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Plataforma 3D
O percursoPlataformas móveis2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no bancoPratique por conta própria: Playground de Unity