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.
Sfida
MedioLa 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:
speedunità 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);
}
}
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