Muévete hacia un punto
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 35 de 85.
Vector3.MoveTowards(current, target, maxStep) devuelve un punto que está hasta maxStep más cerca de target. Si el objetivo está más cerca que eso, devuelve el propio objetivo, así que nunca se pasa. Con speed * Time.deltaTime como paso, un objeto se desplaza a velocidad constante y se detiene exactamente en el objetivo. Este teleférico se desliza hasta su estación a 2 unidades por segundo:
public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}Una vez que llega, todas las llamadas posteriores devuelven station de nuevo, así que el teleférico se queda quieto y transform.position == station es verdadero. Para un solo número, Mathf.MoveTowards funciona de la misma manera.
Vector3.Lerp(a, b, t) es el punto que está a una fracción t del recorrido desde a hasta b: con t = 0.5 está a medio camino. Escrito como Lerp(transform.position, station, 2f * Time.deltaTime) en Update(), recorre una parte de la distancia restante en cada fotograma: rápido al principio, cada vez más despacio al acercarse al final, acercándose poco a poco en vez de llegar a una velocidad fija. Usa MoveTowards cuando un objeto deba desplazarse a una velocidad fija y detenerse exactamente; usa ese patrón de Lerp para una desaceleración suave.
Desafío
IntermedioHaz que el dron vuele hasta su plataforma de aterrizaje cuando se pulse la barra espaciadora.
- Añade los campos
bool flying;ybool landed;. Al pulsarInput.GetKeyDown(KeyCode.Space), estableceflying = true;. - Mientras
flying && !landed, muévelo conVector3.MoveTowards(transform.position, pad, speed * Time.deltaTime). - Cuando
transform.position == pad, establecelandedy registraLanded.
Pulsa «Jugar» y después la barra espaciadora: el dron aterriza en la plataforma. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class Drone : MonoBehaviour
{
public Vector3 pad = new Vector3(0, 0.25f, 0);
public float speed = 2f;
void Update()
{
// Después de Space: vuela hacia pad a velocidad speed y registra Landed una sola vez al llegar
}
}
Todas las lecciones de Fundamentos de scripting en Unity
1Conceptos básicos de C# en Unity
Hola, UnityVariablesLos decimales necesitan una fTexto en la consolaVariables que recuerdanIf y ElseComparar númerosRepaso: Recolector de monedas7Bucles y métodos
Repetir con forBucles dentro de buclesEscribir un métodoMétodos que respondenArraysRepaso: escalera10Encontrar cosas
Buscar por nombreEtiquetasBuscar por tipoLas referencias vencen a FindEl null de UnityRepaso: moneda más cercana13Proyecto: Esquiva los bloques
El corredorBloques desde el cielo2Haz que se mueva
Coloca el cuboMuévelo en cada fotogramaGira cada segundoDirige con las teclasRepaso: conduce el cubo5Vectores
Sumar vectoresDireccionesEspacio local y mundialVelocidad diagonalDistancia entre objetosVector3 es una estructuraRepaso: piloto de dron8GameObjects y componentes
Referencias en el InspectorObtener un componenteComponentes faltantesAñadir un componenteRequireComponentMostrar y ocultarRepaso: interruptor de luz3El Inspector
Campos del InspectorSerializeFieldFloats y MathfAtributos del InspectorRepaso: Ascensor6Transformaciones y jerarquía
Padres e hijosIza la banderaEscalaMira las cosasMuévete hacia un puntoRepaso: Luna en órbita9Proyecto: Atrapa la estrella
El cazadorUna estrella fugaz12El ciclo de vida de un script
Awake y StartUpdate y LateUpdateOnEnable y OnDisableEl orden del ciclo de vidaRepaso: registrador del ciclo de vidaPractica por tu cuenta: Playground de Unity