Il percorso
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 49 di 60.
In questo capitolo realizzerai un platform 3D. Correrai e salterai da una piattaforma sospesa all’altra, salirai su una piattaforma che scorre, toccherai i checkpoint per non tornare all’inizio quando cadi, raccoglierai gemme conteggiate sullo schermo, attraverserai il traguardo per passare al livello successivo e proverai a battere il tuo record. Il gioco è composto da cinque script, già presenti nel progetto dall’inizio: Player, MovingPlatform, Checkpoint, Gem e FinishLine. Gli ultimi quattro sono vuoti per ora, e ogni lezione ne completerà uno. Il giocatore è un CharacterController controllato tramite le azioni dell’Input System, e la telecamera è un suo oggetto figlio, quindi lo segue senza bisogno di uno script.
Un CharacterController si muove in due modi. Move(motion) lo sposta di una distanza senza aggiungere nulla, quindi gravità, salti e Time.deltaTime sono compito dello script, come nel capitolo Character Controller. SimpleMove(speed) accetta una velocità in unità al secondo, la moltiplica per il tempo del fotogramma e aggiunge la gravità; ignora il valore y che gli passi, quindi un personaggio spostato con questo metodo cade dalle sporgenze, ma non può mai saltare. Questo cane da pastore in un gioco di pastorizia visto dall’alto non ha bisogno di saltare, quindi SimpleMove e l’azione Move costituiscono tutto il suo script:
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);
}
}Il giocatore del platform deve poter saltare, quindi mantiene la propria velocità verticale e si muove con Move, leggendo le azioni Move e Jump invece della classe Input. Unity consiglia una sola chiamata a Move o SimpleMove per fotogramma: la camminata e la caduta confluiscono nella stessa chiamata, e isGrounded descrive quindi l’intero movimento.
Sfida
MedioFai camminare, saltare e cadere il personaggio.
- In
Start(), trovaMoveeJumpconInputSystem.actions.FindAction. - In
Update(), cammina alla velocitàspeed: la x di Move lungo x, la sua y lungo z. - Aggiungi
gravity * Time.deltaTimeavelocity.y; imposta-2fquando è a terra e sta cadendo. Quando è a terra, il salto imposta il valore aMathf.Sqrt(jumpHeight * -2f * gravity). - Chiama
controller.Move((move + velocity) * Time.deltaTime)una volta.
Premi «Gioca»: salta sulla prima piattaforma. Poi premi «Verifica».
Provalo tu
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()
{
// cammina con l'azione Move, salta con l'azione Jump, cadi per effetto della gravità
}
}
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity