Que precioso fue haberlo codeado antes y que lo haya hecho de la misma manera el profe, ya me estan haciendo efectos todos los cursos de unity que he tomado tanto aqui como en otros lados 😄
Introducción
Game Design del juego
La estructura y assets de un proyecto en Unity
Convirtiendo nuestros assets en Tiles
Tilemaps y creación del escenario
Bonus: FastForward de la creación del escenario, sorting layers y creación de colliders
Acá encontrarás los archivos de este curso
Personaje principal: Movimiento y Animaciones
El jugador y el movimiento
Creando nuestra primera animación
Creando el grafo de animaciones
Usando un árbol de animaciones
Mostrando la solución del desafío e implementando transición entre blended trees
Programando una cámara que siga al jugador
Corrección del bug gráfico
límites del escenario, rigid bodies
Ejercicio: diseño de interiores
Escenarios Avanzados
Transiciones entre escenas
Mantener Player y Camera entre escenas
Spawning Points: programando que el jugador y la cámara aparezcan en el lugar correcto al cambiar de escena
Agregando Identificadores a nuestros Spawning Points para controlar mejor el flujo de nuestro juego
Enemigos Avanzados
Creando nuestro enemigo
Programando las físicas y el patrullaje del enemigo
Generando movimiento completamente aleatorio
Programando el ataque del enemigo
Crear Manager de Health del Player
Crear armas
Programando el ataque del Player con arma
Mover la espada al caminar
Creando el ataque con espada
Ejecutando el ataque con un botón
Movimiento en diagonal
Optimizando nuestro player controller
Ataque mejorado
Uso de partículas
Añadir el daño del enemigo en batalla
Programando los contadores de vida del enemigo
Colocando más info de UI en pantalla
Script de la vida
Personaje principal avanzado
Añadir el daño del personaje (ejercicio)
Sistema de puntos de experiencia para nuestro personaje principal
Level Up!
Level Up! Defensa y Reto Final del Módulo: Stats de los enemigos
Creando un NPC
Limitar el movimiento de nuestro NPC
Creando una pantalla de diálogos para nuestro RPG
El diálogo del NPC
Múltiples líneas de diálogo
Parar el NPC durante el diálogo
Parar el personaje durante el diálogo
Quests
La estructura de una quest
Quest 1: Ir a un lugar
Quest 2: Encontrar un objeto
Quest 3: Matar enemigos
Revisión de bugs
Mantener la cámara dentro del escenario
El problema al cambiar de escena
Audio
Agregando SFX a nuestro videojuego
Agregando música a nuestro videojuego
Ajustar volúmen del audio de cada uno de los efectos de sonido
Creando un VolumeManager
Agregando economía a nuestro juego y cierre
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
En el desarrollo de videojuegos, uno de los detalles que proporcionan una experiencia inmersiva al jugador es el movimiento de la cámara. Asegurar que la cámara siga al jugador de manera fluidamente es esencial para evitar frustraciones. La forma sencilla de lograr esto podría ser arrastrar la cámara para que sea un hijo del objeto del jugador, moviéndose conjuntamente. Sin embargo, en este texto mostramos cómo hacerlo mediante programación, añadiendo incluso un ligero retraso que ofrece al usuario una experiencia más natural.
Para que la cámara siga al jugador, es necesario crear un script denominado CameraFollow
. Este script debe asignarse a la cámara, ya que es la que se desplazará. La primera tarea es definir tres variables clave:
FollowTarget
: un GameObject
público que representa al jugador al que la cámara seguirá.TargetPosition
: un Vector3
privado y serializable que identificará la posición central del jugador.CameraSpeed
: un float
privado y serializable que definirá la velocidad de seguimiento de la cámara.Estas variables deben configurarse adecuadamente en el editor de Unity. La FollowTarget
indica a qué objeto debe seguir la cámara, el TargetPosition
sirve para tener una referencia de la ubicación actual del jugador, y la CameraSpeed
, que por defecto está en 4, asegura que el movimiento de la cámara sea coherente con el del jugador.
[SerializeField] private GameObject followTarget;
[SerializeField] private Vector3 targetPosition;
[SerializeField] private float cameraSpeed = 4f;
La posición de la cámara debe calcularse teniendo en cuenta la posición del jugador. En un videojuego 2D, el eje Z generalmente no se utiliza, salvo para la cámara, que por defecto en Unity está en Z igual a -10. Así, mientras calculamos targetPosition
, debemos tomar en cuenta:
La posición X e Y del jugador.
Mantener la posición Z de la cámara para conservar la percepción visual correcta.
targetPosition = new Vector3(followTarget.transform.position.x, followTarget.transform.position.y, transform.position.z);
La interpolación lineal es clave para asegurar que la cámara se mueva de manera suave entre puntos. En lugar de que la cámara salte abruptamente a la nueva posición del jugador, se mueve gradualmente, evitando movimientos bruscos que podrían distraer al usuario. Implementarlo se resume en utilizar Vector3.Lerp
, donde se especifica:
La posición actual de la cámara.
La posición objetiva calculada.
Un tercer parámetro que combina la velocidad de la cámara y el delta time.
transform.position = Vector3.Lerp(transform.position, targetPosition, cameraSpeed * Time.deltaTime);
A pesar de este método, es posible que surjan pequeños bugs, por ejemplo, cuando el personaje se mueve demasiado hacia abajo y se sale del escenario. Es crucial detectar estos problemas a tiempo y ajustar el código según sea necesario para mejorar el comportamiento del juego. Al seguir estos pasos, ya se ha logrado una implementación básica y funcional del movimiento de cámaras en un juego 2D.encia, lo que invita a continuar mejorando y depurando el código.
Aportes 13
Preguntas 0
Que precioso fue haberlo codeado antes y que lo haya hecho de la misma manera el profe, ya me estan haciendo efectos todos los cursos de unity que he tomado tanto aqui como en otros lados 😄
Creo que mas fácil es utilizarla herramienta que nos enseñaron e otro curso de platzi. Se llama cineChine, lo encuentran así:
Window -> Package Manager -> CinemaChine , luegole dan instalar. Les aparecerá una nueva pestaña arriba llamada cinemachine, le dan a la primera opción, create new virtua camera y luego les saldrá un nuevo elemento en la jerarquía. Lo abren y arrastran al objeto jugador a los slots de Follow y look at. Saldrá una zona azul en la pantalla de Game, esa es la zona donde la cámara seguirá al jugador, para crear una zona donde no lo seguirá vayan hasta los parámetros Aim, y cambian el valor de las variables Dead Zone Width y Height y veran como sale un rectángulo son color rodeando al jugador. Denle play y fíjense como se comporta la camara 😄. Seguro hay tutoriales en youtube para usar mejor este paquete ojala les sea de ayuda. Y sin una sola linea de código!
Si la cámara no se les mueve tienen que seleccionar la cámara, ir al inspector y en el followTarget poner Player.
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
}
}
Tengo 2 comentarios:
.
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);
}
}
Genial
Muy completa la clase, si desean pueden leer también como apoyo la documentación oficial de Unity.
Hola alguien sabe porque no usamos cinemachine?
Para que sirve SerializeField
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?