CharacterController.Move
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 37 di 56.
Un CharacterController è il componente di Unity per un personaggio che cammina: una capsula che si muove solo quando il tuo script chiama controller.Move(motion). motion è la distanza da percorrere in questo frame, quindi è una velocità moltiplicata per Time.deltaTime. Move fa scivolare la capsula lungo i muri invece di attraversarli, le fa salire pendenze fino al suo Slope Limit (45 gradi) e le fa superare gradini fino al suo Step Offset (0.3 unità). Non è un Rigidbody: niente forze, niente gravità, niente rimbalzi e niente lo spinge. Va esattamente dove la manda Move, come serve per controlli di gioco precisi.
La gravità devi aggiungerla tu, così come devi trovare il pavimento. isGrounded è true quando l'ultima Move ha toccato qualcosa sotto, quindi un movimento senza componente verso il basso non trova mai il pavimento. Una Move più breve della Min Move Distance del controller (0.001) non fa assolutamente nulla, quindi un controller mosso solo lateralmente segnala di non essere a terra non appena si ferma. Questo corriere cammina con le frecce e preme leggermente verso il basso a ogni movimento:
public class Courier : MonoBehaviour
{
public float speed = 6f;
CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
move.y = -2f; // spingi sempre verso il basso, così viene rilevato il pavimento
controller.Move(move * Time.deltaTime);
if (!controller.isGrounded)
{
Debug.Log("Off the ground");
}
}
}La capsula mantiene una distanza pari alla sua Skin Width (0.08) da ciò che tocca, quindi un controller alto 2 unità su un pavimento a y = 0 si trova a y = 1.08, non a 1. E Move parte dal punto in cui la fisica ha rilevato il controller l'ultima volta, quindi un transform.position impostato su di esso può essere annullato dalla Move successiva: per teletrasportarlo, imposta controller.enabled = false, spostalo e riattivalo.
Sfida
MedioL'esploratore si trova su una piattaforma di pietra, con un muro sul retro e un precipizio a sinistra. Scrivi Explorer.cs sul Player, che ha un CharacterController. Nell'Inspector imposta speed (4) e fallSpeed (3), e Start() trova già il controller e il Renderer dell'esploratore.
- Le frecce (o WASD), lette con gli assi grezzi, lo fanno camminare con
controller.Moveaspeedunità al secondo: a sinistra e a destra lungo x, in alto e in basso lungo z. Il muro deve fermarlo. - Ogni movimento va anche verso il basso a
fallSpeedunità al secondo, così l'esploratore resta sulla piattaforma e ne precipita dal bordo. - Quando il controller è a terra, l'esploratore è
Color.green; quando non lo è,Color.red.
Premi Play, cammina contro il muro e oltre il bordo, poi Check.
Provalo tu
using UnityEngine;
public class Explorer : MonoBehaviour
{
public float speed = 4f;
public float fallSpeed = 3f;
CharacterController controller;
Renderer rend;
void Start()
{
controller = GetComponent<CharacterController>();
rend = GetComponent<Renderer>();
}
void Update()
{
// Muovi l'esploratore con controller.Move, poi coloralo in base a isGrounded
}
}
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