Il percorso
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 48 di 56.
Questo capitolo realizza un platform 3D. Corri e salti tra piattaforme fluttuanti, sali su una che scivola, tocchi i checkpoint così che una caduta non ti rimandi all'inizio, raccogli gemme conteggiate sullo schermo, attraversi il traguardo per passare al livello successivo e cerchi di battere il tuo record. Il gioco è composto da cinque script, presenti nel progetto fin dall'inizio: Player, MovingPlatform, Checkpoint, Gem e FinishLine. Gli ultimi quattro sono vuoti per ora e ogni lezione ne completa uno. Il personaggio è un CharacterController controllato tramite le azioni dell'Input System, e la telecamera è un suo elemento figlio, quindi lo segue senza bisogno di uno script.
Un CharacterController si muove in due modi. Move(motion) lo sposta di una distanza e non aggiunge nulla, quindi gravità, salti e Time.deltaTime sono compito dello script, come nel capitolo Character Controller. SimpleMove(speed) usa una velocità in unità al secondo, la moltiplica per il tempo del frame e aggiunge la gravità; ignora il valore y che gli passi, quindi un personaggio mosso con questo metodo cade dai bordi, ma non può mai saltare. Questo cane da pastore in un gioco di conduzione 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 personaggio del platform deve poter saltare, quindi gestisce 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 frame: la camminata e la caduta confluiscono nella stessa chiamata, e isGrounded descrive quindi l'intero movimento.
Sfida
MedioInizia il platform con il giocatore. Lo script Player ha speed (5), jumpHeight (1.5) e gravity (-9.81), il controller e una velocity per la caduta. Trova una sola volta le azioni Move e Jump, in Start, e in Update:
- Move fa camminare il giocatore a
speedunità al secondo: a destra e a sinistra lungo x, avanti e indietro lungo z. - La gravità aggiunge
gravity * Time.deltaTimeavelocity.ya ogni frame. Quando il controller è a terra evelocity.yè minore di 0, imposta primavelocity.ya -2, così il giocatore resta premuto a terra. - Ogni pressione di Jump, quando il giocatore è a terra, imposta
velocity.ysuMathf.Sqrt(jumpHeight * -2f * gravity): un salto altojumpHeightunità. Tenendo premuto Jump si salta una sola volta, e non si può saltare a mezz'aria. - Chiama
controller.Moveuna sola volta, combinando la camminata evelocity, moltiplicate perTime.deltaTime.
Premi Play e salta fino alle prime piattaforme, poi premi Check.
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à
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
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: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input