Menu
CoddyTech

Muoviti dove guardi

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 41 di 56.

Quando la telecamera guarda il giocatore da un'angolazione, le frecce dovrebbero spostare il giocatore come appare sullo schermo: con su ci si allontana dalla telecamera, con destra ci si sposta verso la destra della telecamera. Gli assi del mondo fanno questo solo quando la telecamera guarda lungo +z. Quindi crea il movimento usando le direzioni della telecamera stessa, cam.forward e cam.right.

Prima bisogna ripulirle. Una telecamera che guarda il giocatore dall'alto ha un forward che punta verso il terreno, quindi imposta il suo y a 0 per mantenere solo la componente parallela al terreno. Il vettore rimanente è più corto di 1, circa 0.87 per una telecamera inclinata verso il basso di 30 gradi, e il giocatore camminerebbe più lentamente, quindi normalizzalo. Questo personaggio segue la telecamera principale, che guarda un angolo del livello:

Transform cam = Camera.main.transform;

Vector3 forward = cam.forward;
forward.y = 0f;
forward.Normalize();
Vector3 right = cam.right;
right.y = 0f;
right.Normalize();

Vector3 move = forward * Input.GetAxisRaw("Vertical") + right * Input.GetAxisRaw("Horizontal");
if (move.magnitude > 1f) move.Normalize();   // i movimenti diagonali non sono più veloci
controller.Move(move * speed * Time.deltaTime);

Camera.main è la telecamera con il tag MainCamera. Le due direzioni vengono lette a ogni fotogramma, così i comandi restano corretti quando la telecamera ruota. Su e destra insieme sommano due vettori unitari ad angolo retto, che hanno una lunghezza di circa 1.41, quindi il movimento viene normalizzato quando è maggiore di 1.

challenge icon

Sfida

Medio

La telecamera gira lentamente intorno al giocatore (CameraRig.cs, pronto), così gli assi del mondo continuano a ruotare sullo schermo. Fai in modo che le frecce muovano il giocatore rispetto alla telecamera in Mover.cs, dove la gravità è già stata scritta. Nell’Inspector imposta speed (4) e cam, il Transform della telecamera.

  • Su fa camminare allontanandosi dalla telecamera lungo il terreno, giù verso di essa, destra e sinistra rispettivamente alla destra e alla sinistra della telecamera: speed unità al secondo in ogni direzione, diagonali incluse, anche se la telecamera guarda il giocatore dall’alto.
  • Mentre cammina, il giocatore si gira per rivolgersi nella direzione in cui cammina. Quando si ferma, continua a guardare in quella direzione.

Premi Play, cammina mentre la telecamera gira, poi premi Check.

Provalo tu

using UnityEngine;

public class Mover : MonoBehaviour
{
    public float speed = 4f;
    public float gravity = -15f;
    public Transform cam;

    CharacterController controller;
    float verticalSpeed;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (controller.isGrounded && verticalSpeed < 0f)
        {
            verticalSpeed = -2f;
        }
        verticalSpeed += gravity * Time.deltaTime;

        // Si muove lungo gli assi del mondo: fallo muovere rispetto a cam e rivolgere nella direzione in cui si muove
        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = verticalSpeed;
        controller.Move(move * Time.deltaTime);
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi