Café y Código

2. Física y Movimiento del Jugador: Programando en C# 💻⚽

El Sistema de Física de Unity: Rigidbody

Para que un objeto 3D caiga, ruede y reaccione a colisiones de forma realista, debe integrarse con el motor físico de Unity. Esto se logra a través del componente Rigidbody.

¿Cómo agregar física? Selecciona tu esfera Player en la jerarquía, ve al Inspector, haz clic en Add Component, escribe Rigidbody y selecciónalo. Deja activa la casilla Use Gravity.

Si presionas el botón de Play en la parte superior del editor, verás que la esfera ahora cae por efecto de la gravedad y se detiene firmemente sobre el piso (gracias a sus componentes Rigidbody y Sphere Collider).

Creando el Primer Script C#

Para controlar cuándo y hacia dónde se mueve la pelota, escribiremos nuestro primer script en C#:

  1. En la ventana Project, haz clic derecho, selecciona Create -> C# Script. Nómbralo exactamente como PlayerController (sin espacios y respetando mayúsculas/minúsculas).
  2. Haz doble clic en el script para abrirlo en tu editor de código (como Visual Studio o VS Code).
  3. Reemplaza el código por defecto con el siguiente bloque:
PlayerController.cs
CSHARP
1 using UnityEngine;
2
3 public class PlayerController : MonoBehaviour
4 {
5 // [SerializeField] permite editar esta variable desde el Inspector
6 [SerializeField] private float speed = 10f;
7
8 private Rigidbody rb;
9
10 // Start se ejecuta una sola vez al iniciar el juego
11 void Start()
12 {
13 // Guardamos la referencia al componente Rigidbody del jugador
14 rb = GetComponent<Rigidbody>();
15 }
16
17 // FixedUpdate se usa para calculos fisicos constantes
18 void FixedUpdate()
19 {
20 // 1. Leer los inputs del teclado (WASD / Flechas de direccion)
21 float moveHorizontal = Input.GetAxis("Horizontal");
22 float moveVertical = Input.GetAxis("Vertical");
23
24 // 2. Crear el vector de direccion en 3D (X, Y, Z)
25 Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
26
27 // 3. Aplicar fuerza al Rigidbody para mover la esfera
28 rb.AddForce(movement * speed);
29 }
30 }

Explicación del Código:

  • [SerializeField]: Le dice a Unity que muestre la variable speed en el Inspector del editor. Así podemos cambiar la velocidad de la pelota sin volver a abrir el editor de código.
  • GetComponent<Rigidbody>(): Busca y guarda la referencia de las físicas del objeto en la variable rb al iniciar el juego.
  • Input.GetAxis("Horizontal"): Devuelve un valor entre -1 y 1 dependiendo de si presionas las teclas A/D (Flechas Izquierda/Derecha). "Vertical" hace lo mismo para W/S (Flechas Arriba/Abajo).
  • rb.AddForce(): Aplica un empuje físico en 3D sobre la esfera multiplicando la dirección del teclado por nuestra velocidad.
¡Muy importante! Recuerda arrastrar y soltar el script PlayerController desde tu carpeta de Proyecto sobre tu esfera Player en la jerarquía para activarlo.

Cámara en Seguimiento: Creando el Script de Cámara

Si mueves la pelota fuera de la vista de la cámara, no podrás ver a dónde va. Necesitamos que la cámara principal siga al jugador de forma fluida.

  1. Crea un nuevo C# Script y nómbralo CameraFollow.
  2. Escribe el siguiente código dentro del script:
CameraFollow.cs
CSHARP
1 using UnityEngine;
2
3 public class CameraFollow : MonoBehaviour
4 {
5 // El objeto que la camara debe seguir (el jugador)
6 [SerializeField] private Transform target;
7
8 // Distancia offset inicial entre la camara y el jugador
9 [SerializeField] private Vector3 offset = new Vector3(0, 5, -7);
10
11 // LateUpdate corre despues de que todos los objetos se han movido en Update
12 void LateUpdate()
13 {
14 if (target != null)
15 {
16 // Posicionamos la camara en la posicion del jugador mas el desfase
17 transform.position = target.position + offset;
18
19 // Hacemos que la camara apunte continuamente al jugador
20 transform.LookAt(target);
21 }
22 }
23 }

Configuración de la Cámara:

  1. Arrastra el script CameraFollow sobre el objeto Main Camera en la jerarquía.
  2. Selecciona la Main Camera y busca el script en el Inspector. Verás un campo vacío llamado Target.
  3. Arrastra tu objeto Player desde la jerarquía y suéltalo dentro del campo Target.

¡Listo! Si das Play y mueves la esfera con las flechas o WASD, la cámara la seguirá manteniendo un ángulo perfecto en tercera persona.

Ponte a prueba

Comprueba si has comprendido los fundamentos del control de físicas mediante C# en Unity.

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.
🎮 CONSOLA DE SKIN
Comandos: matrix, minecraft, pacman, default
>