Menu
CoddyTech

Persigue al jugador

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 50 de 63.

Un enemigo que persigue al jugador necesita un Rigidbody, para que las paredes lo detengan y pueda empujar y ser empujado. La persecución en sí consiste en una velocidad dirigida hacia el jugador, que se establece una vez por paso de física. Este zombi camina hacia lo que sea que esté en su espacio player:

[SerializeField] private Transform player;
[SerializeField] private float speed = 2.5f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    Vector3 toPlayer = player.position - rb.position;
    toPlayer.y = 0f;
    Vector3 dir = toPlayer.normalized;
    rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}

player.position - rb.position apunta desde el zombi hacia el jugador. Su componente y se establece en 0 para que el zombi camine en horizontal cuando el jugador está más arriba o más abajo, y normalized le da una longitud de 1, así que el zombi camina a speed tanto si el jugador está a 2 unidades como a 20. La nueva velocidad conserva la antigua velocidad y, así que la gravedad sigue tirando del zombi hacia abajo cuando baja de un escalón. Su Rigidbody tiene activada la opción Freeze Rotation, así que no se vuelca mientras camina.

Una velocidad que estableces hace que el enemigo comience a moverse y gire de inmediato. En cambio, puedes empujar a un enemigo pesado con AddForce dentro del mismo FixedUpdate: va ganando velocidad, conserva su impulso y se pasa de largo cuando el jugador se aparta. Evita mover el Transform de un perseguidor: eso lo coloca dentro de una pared con la misma facilidad que en cualquier otro sitio, y el motor de física solo puede empujarlo hacia fuera después.

challenge icon

Desafío

Intermedio

Una roca rueda detrás del jugador. Escribe el script Boulder en la roca, una esfera con un Rigidbody. El Inspector le asigna player (el Player) y force (6). El script Player está listo: las flechas hacen caminar al jugador.

  • En cada paso de física, empuja la roca hacia el jugador con AddForce, con una fuerza de force, tanto si el jugador está cerca como lejos.
  • Empújala solo por el suelo, sin componente hacia arriba ni hacia abajo, incluso cuando el jugador esté sobre el borde.
  • No muevas su Transform ni congeles su rotación: la fricción la hace rodar.

Pulsa Play, corre en círculos alrededor de la roca y después pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class Boulder : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private float force = 6f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // empuja la roca hacia el jugador, a ras del suelo
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad