O Percurso
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 48 de 56.
Este capítulo cria um jogo de plataforma 3D. Você corre e pula entre plataformas flutuantes, anda em uma que desliza, toca nos 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 chegar ao próximo nível e tenta superar 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 últimos quatro estão vazios por enquanto, e cada aula 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 move por uma distância e não adiciona nada, então gravidade, pulos e Time.deltaTime ficam a cargo do script, como no capítulo Character Controller. SimpleMove(speed) recebe uma velocidade em unidades por segundo, ajusta-a pelo tempo do próprio quadro e adiciona gravidade; ele ignora o valor de y que você passar, então um personagem movido com ele cai de plataformas, mas nunca pode pular. Este cão pastor em 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: a caminhada e a queda entram na mesma chamada, e isGrounded descreve então todo esse movimento.
Desafio
MédioComece o jogo de plataforma com o jogador. O script Player tem speed (5), jumpHeight (1.5) e gravity (-9.81), o controller e uma velocity para a queda. Encontre as ações Move e Jump uma vez, em Start, e em Update:
- Move faz o jogador andar a
speedunidades por segundo: para a direita e para a esquerda ao longo de x, para frente e para trás ao longo de z. - A gravidade adiciona
gravity * Time.deltaTimeavelocity.ya cada quadro. Enquanto o controlador estiver no chão evelocity.yfor menor que 0, definavelocity.ycomo -2 primeiro, para que o jogador permaneça pressionado contra o chão. - Cada pressionamento de Jump, enquanto estiver no chão, define
velocity.ycomoMathf.Sqrt(jumpHeight * -2f * gravity): um salto dejumpHeightunidades de altura. Manter Jump pressionado faz o jogador saltar uma vez, e não é possível saltar no ar. - Chame
controller.Moveuma vez, com o movimento evelocityjuntos, multiplicados porTime.deltaTime.
Pressione Play e salte até as primeiras plataformas; depois, Check.
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()
{
// mova-se com a ação Move, pule com a ação Jump, caia sob a ação da gravidade
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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: Jogo de 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 banco