Menu
CoddyTech

Cadi e ricomincia

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 52 di 60.

challenge icon

Sfida

Medio

Una caduta dovrebbe riportare indietro il giocatore.

  1. In Player, aggiungi [SerializeField] private float fallY = -5f; e un punto di rigenerazione, impostato sulla posizione iniziale in Start().
  2. Aggiungi public void SetCheckpoint(Vector3 point) che imposta il punto di rigenerazione.
  3. Sotto fallY: imposta controller.enabled = false, spostati al punto di rigenerazione, riabilitalo e azzera velocity.

Premi «Gioca» e salta giù: torni sulla 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 InputAction moveAction;
    private InputAction jumpAction;
    private Vector3 velocity;
    private MovingPlatform platform;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        if (controller.isGrounded && velocity.y < 0f)
        {
            velocity.y = -2f;
        }

        Vector2 input = moveAction.ReadValue<Vector2>();
        Vector3 move = new Vector3(input.x, 0f, input.y) * speed;

        if (jumpAction.WasPressedThisFrame() && controller.isGrounded)
        {
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
        }

        velocity.y += gravity * Time.deltaTime;
        Vector3 motion = (move + velocity) * Time.deltaTime;
        if (platform != null)
        {
            motion += platform.delta;
            platform = null;
        }
        controller.Move(motion);
    }

    void OnControllerColliderHit(ControllerColliderHit hit)
    {
        if (hit.normal.y > 0.5f && hit.gameObject.TryGetComponent(out MovingPlatform moving))
        {
            platform = moving;
        }
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity