Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Fai camminare, saltare e cadere il personaggio.

  1. In Start(), trova Move e Jump con InputSystem.actions.FindAction.
  2. In Update(), cammina alla velocità speed: la x di Move lungo x, la sua y lungo z.
  3. Aggiungi gravity * Time.deltaTime a velocity.y; imposta -2f quando è a terra e sta cadendo. Quando è a terra, il salto imposta il valore a Mathf.Sqrt(jumpHeight * -2f * gravity).
  4. 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

Esercitati da solo: Playground Unity