jairogarcíarincón

La Cámara
Una de las cosas que habrás podido apreciar es que la Main Camera no sigue al jugador, y además tampoco está muy bien posicionada.
Para empezar, selecciona Main Camera en la Hierarchy Window y, en la sección Transform de la Inspector window, ajusta la Position para que coincida con 0, 10, -10 y la Rotation para que coincida con 45, 0, 0. En la ventana Camera Preview deberías ahora ver el suelo y el jugador centrados.
Ahora, arrastra la Main Camera dentro del Jugador, de modo que se convierta en un GameObject hijo (Child). Has creado la típica configuración de juego en 3ª persona, en la cual al moverse o girar el jugador, la cámara siempre lo sigue a una determinada distancia, como observándolo. Si ahora movemos al jugador, veremos que la cámara se mueve con él.
No obstante, si ejecutamos el juego, vemos que dado que la cámara es hija del jugador, al rotar el jugador también rota la cámara, creando un efecto bastante descontrolado.
De este modo, la solución de que la cámara sea hija del jugador no nos vale, y lo que debemos hacer es crear un script que controle el movimiento de la cámara.
Vuelve a arrastrar la Main Camera de modo que ya no sea hija del Jugador y crea un nuevo C# script llamado CamaraController con el siguiente código (Pon atención a los comentarios autoexplicativos):
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
public class CamaraController : MonoBehaviour { | |
//Variable para referenciar nuestro jugador | |
public GameObject jugador; | |
//Variable para registrar la diferencia entre la posición de la cámara y la del jugador | |
private Vector3 offset; | |
// Use this for initialization | |
void Start () { | |
//Diferencia entre la posición de la cámara y la del jugador | |
offset = transform.position - jugador.transform.position; | |
} | |
// Se ejecuta cada frame, pero después de haber procesado todo. Es más exacto para la cámara | |
void LateUpdate () { | |
//Actualizo la posición de la cámara | |
transform.position = jugador.transform.position + offset; | |
} | |
} |
Asocia el script recién creado a la Main Cmaera y arrastra el Jugador a la caja GameObject del apartado Camara Controller del Inspector window de Main Camera. El resultado debería ser similar a éste y si ejecutas el juego, verás que funciona correctamente.

Publicado el 14 de Mayo de 2025
unityvideojuegos3d