Matias Nicolas Giorgieff
Si la cámara no se les mueve tienen que seleccionar la cámara, ir al inspector y en el followTarget poner Player.
Logra que la cámara de tu juego 2D en Unity siga al personaje de forma fluida y profesional. Aquí verás cómo implementar un seguimiento suave con Lerp, configurar variables serializadas y respetar la coordenada Z para evitar distorsiones visuales. Todo con un script simple, claro y mantenible.
¿Qué problema resuelve y por qué seguir al jugador?
La cámara estaba quieta en el centro y el jugador se perdía fuera de plano. La solución es que la cámara siga al jugador con un retardo suave. Puedes hacerlo rápido haciéndola hija del jugador, pero la opción robusta es programarlo por código y controlar la velocidad de seguimiento.
¿Cómo configurar el script CameraFollow en Unity 2D?
Primero crea un script llamado CameraFollow y arrástralo a la cámara en la jerarquía. Usa campos serializados privados para editar desde el inspector sin exponerlos públicamente.
¿Qué variables necesitas y por qué serializarlas?
Ventajas de usar [SerializeField]:
¿Cómo calcular targetPosition y respetar la z?
¿Cómo asignar el objetivo followTarget en el editor?
¿Cómo suavizar el movimiento con interpolación lineal Lerp?
Para evitar movimientos bruscos, usa interpolación lineal con Vector3.Lerp. La idea: moverte del punto A (posición actual de la cámara) al punto B (targetPosition) de forma continua. El factor de interpolación combina velocidad y tiempo: cameraSpeed * Time.deltaTime. Recuerda la relación física: espacio = velocidad × tiempo.
¿Qué código mínimo implementa el seguimiento?
using UnityEngine; public class CameraFollow : MonoBehaviour { [SerializeField] private GameObject followTarget; [SerializeField] private Vector3 targetPosition; [SerializeField] private float cameraSpeed = 4f; void Update() { if (followTarget == null) return; targetPosition = new Vector3( followTarget.transform.position.x, followTarget.transform.position.y, transform.position.z // Mantiene la Z de la cámara (p. ej., -10). ); transform.position = Vector3.Lerp( transform.position, targetPosition, cameraSpeed * Time.deltaTime ); } }
¿Cómo probar y qué ajustar para un seguimiento estable?
¿Quieres que cubra límites de cámara, clamping o seguimiento de otros objetivos como enemigos o NPCs? Escribe tus dudas y casos de uso en los comentarios.
Matias Nicolas Giorgieff
Si la cámara no se les mueve tienen que seleccionar la cámara, ir al inspector y en el followTarget poner Player.
Luis Rodrigo Alvarez Herrera
public class CameraFollow : MonoBehaviour { [SerializeField] private GameObject followTarget; //para poder seguir [SerializeField] //se usa para ver las variables en el editor a pesar de que sean privadas private Vector3 targetPosition; //tener siempre un lugar de referencia [SerializeField] private float cameraSpeed = 4.0f; //al mismo valor que el jugador // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { targetPosition = new Vector3(followTarget.transform.position.x, followTarget.transform.position.y, this.transform.position.z); //el target position seguira los pasos de x y y pero quedara alejada en z this.transform.position = Vector3.Lerp(this.transform.position, targetPosition, cameraSpeed * Time.deltaTime);//este objeto se movera en 3 dimenciones, partiendo de su punto original, a donde debe moverse la camara la cual es calculada por targetPosition, bajo que parametro se movera pues es la velocidad por los frame spor segundo } }
Gabriel Araya
Tengo 2 comentarios: .
Leonel Grisaleña
Yo tenia entendido que los movimientos se hacian en el FixedUpdate. El LateUpdate era más para cambiar animaciones, ya que garantizabas que se habia ejecutado todo el codigo previamente y lo último que actualizas es la animación, pero puedo equivocarme.
Will Carlo
El cod de la calse de hoy. .
using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Threading; using UnityEngine; public class CameraFollow : MonoBehaviour { [SerializeField] public GameObject followTarget; [SerializeField] private Vector3 targetPosition; [SerializeField] private float cameraSpeed = 4.0f; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { targetPosition = new Vector3(followTarget.transform.position.x, followTarget.transform.position.y, this.transform.position.z); this.transform.position = Vector3.Lerp(this.transform.position, targetPosition, cameraSpeed * Time.deltaTime); } }
Leonardo Gutierrez
Genial
Hector Alejandro Ramirez Huertas
Hector Alejandro Ramirez Huertas
Wandy Rafael Santana Evangelista
Muy completa la clase, si desean pueden leer también como apoyo la documentación oficial de Unity.
Martin Mendez
Líam Ayelén Acosta Muñoz
Hola alguien sabe porque no usamos cinemachine?
Juan Carlos Padilla Climaco
Para que sirve SerializeField
Thomas Antonio Contreras Lan
Estuve revisando doc y se usa para que el campo, aunque sea PRIVADO, se muestre en el inspector/editor. :D