Unreal Engine: Creando un Sistema de Teletransporte con Portales Dinámicos y FX
Este tutorial te guiará paso a paso en la creación de un sistema de teletransporte con portales dinámicos en Unreal Engine 5. Cubriremos la implementación de la lógica Blueprint, la configuración de efectos visuales y la interacción del jugador para crear una experiencia inmersiva y funcional.
🚀 Introducción al Sistema de Teletransporte con Portales
El teletransporte es una mecánica fascinante que puede añadir una capa extra de complejidad y diversión a tus juegos. Desde la exploración rápida hasta la resolución de puzles, los portales ofrecen una gran versatilidad. En este tutorial, nos sumergiremos en cómo construir un sistema de teletransporte con portales dinámicos en Unreal Engine 5, completo con efectos visuales para una experiencia más pulida.
¿Qué aprenderemos en este tutorial?
- Configurar Actores de Portal utilizando Blueprints.
- Implementar la lógica de teletransporte entre portales.
- Crear efectos visuales (FX) para la activación y desactivación de portales.
- Manejar la persistencia y activación de portales en el mundo del juego.
🛠️ Configuración Inicial del Proyecto
Antes de sumergirnos en la lógica, necesitamos preparar nuestro proyecto en Unreal Engine 5.
1. Crear un Nuevo Proyecto
Si aún no tienes un proyecto, crea uno nuevo. Puedes elegir la plantilla 'Third Person' o 'First Person' para tener un personaje jugable base. Asegúrate de que sea un proyecto de Blueprint o C++ si planeas extenderlo con código.
2. Estructura de Carpetas
Una buena organización es clave. Crea las siguientes carpetas en Content:
PortalsBlueprintsMaterialsMeshesFX
Esto nos ayudará a mantener nuestro proyecto limpio y fácil de navegar.
🚪 Creando el Actor Base del Portal
Comenzaremos creando un Blueprint de Actor que servirá como nuestro portal. Este será el fundamento de nuestro sistema.
1. Blueprint BP_PortalBase
- En la carpeta
Portals/Blueprints, haz clic derecho y seleccionaBlueprint Class. EligeActorcomo clase padre y nómbraloBP_PortalBase. - Abre
BP_PortalBase. - Añade los siguientes componentes:
Static Mesh(nómbraloPortalFrame): Este será el marco visual de tu portal. Por ahora, puedes usar una forma básica como unCubeo unCylindery escalarlo para que parezca un marco de portal. Más adelante, lo reemplazaremos con un mesh personalizado.Box Collision(nómbraloTeleportVolume): Este componente detectará cuando el jugador entra al portal. Escálalo para que cubra el área donde el jugador debe teletransportarse.Scene Capture Component 2D(nómbraloPortalView): Este componente capturará la vista a través del portal y la renderizará en una textura. DeshabilitaPrimitive Rendersi está activo, ya que queremos que capture el mundo, no sus propios primitivos.
2. Configuración de TeleportVolume
Selecciona el componente TeleportVolume y en el panel de Details:
- Scroll hacia abajo hasta
Collision. - En
Collision Presets, seleccionaOverlapAllDynamic. - Asegúrate de que
Generate Overlap Eventsesté activado. - En
Events, haz clic en+junto aOn Component Begin OverlapyOn Component End Overlap.
3. Variables Necesarias
Vamos a añadir algunas variables para controlar el comportamiento del portal. En la pestaña Variables:
TargetPortal(Type:BP_PortalBaseObject Reference): Esta variable almacenará una referencia al portal de destino al que este portal teletransportará al jugador.PortalMaterial(Type:Material Instance DynamicObject Reference): Almacenará la instancia de material dinámico que usaremos para mostrar la vista del portal.RenderTexture(Type:Texture Render Target 2DObject Reference): Referencia a la textura a la quePortalViewrenderizará la escena.bIsActive(Type:Boolean): Indica si el portal está activo y listo para teletransportar.
🎨 Creando Materiales y Render Targets
Para que nuestros portales muestren la vista del otro lado, necesitamos crear una Render Target y un material.
1. Texture Render Target 2D
- En la carpeta
Portals/FX, haz clic derecho y seleccionaMaterials & Textures->Render Target. - Nómbralo
RT_PortalView_A. - Crea otro y nómbralo
RT_PortalView_B.
Cada portal necesitará su propio Render Target para capturar la vista de forma independiente.
2. Material del Portal (M_Portal) y su Instancia
- En la carpeta
Portals/Materials, haz clic derecho y seleccionaMaterialy nómbraloM_Portal. - Abre
M_Portal. Este material se aplicará a la 'pantalla' del portal.- Cambia el
Blend ModeaMaskedoTranslucent(dependiendo de tu diseño). - Añade un nodo
Texture Sample. - Promociona la entrada
Texturea un parámetro (PortalRenderTexture). - Conecta la salida
RGBdelTexture SamplealEmissive Colordel material. - Si usas
Masked, conecta la salidaAlphao unMaskalOpacity Mask.
- Cambia el
- Guarda el material.
Ahora, crea una Material Instance de M_Portal en la misma carpeta y nómbrala MI_Portal_A. Crea otra, MI_Portal_B.
3. Asignación en BP_PortalBase
De vuelta en BP_PortalBase:
- En el
Construction Script:- Arrastra un nodo
PortalFrame. - Arrastra un nodo
Create Dynamic Material Instance. - Conecta la salida del
Create Dynamic Material Instancea unSet MaterialdelPortalFrame(Element Index 0). - Guarda la referencia del
Material Instance Dynamicresultante en la variablePortalMaterial.
- Arrastra un nodo
- En el
Event GraphdeEvent BeginPlay:- Conecta un nodo
Set Render TargetalPortalViewcomponente, usando la variableRenderTexture. - Conecta un nodo
Set Texture Parameter ValuealPortalMaterial. Establece elParameter NameaPortalRenderTexture(el nombre del parámetro que creamos en el material) y elValuea la variableRenderTexture.
- Conecta un nodo
🧠 Lógica de Teletransporte en Blueprint
Ahora vamos a implementar la lógica principal que hará que nuestros portales funcionen.
1. OnComponentBeginOverlap para TeleportVolume
En el Event Graph de BP_PortalBase:
- Desde el evento
On Component Begin OverlapdeTeleportVolume:- Haz un
Cast Totu personaje jugable (e.g.,Cast To ThirdPersonCharacter). - Si el
Castes exitoso (usa la pinAs Third Person Character), comprueba si el portal está activo con unBranchusando la variablebIsActive. - Si está activo y
TargetPortales válido (usa unIsValidnode paraTargetPortal), llama a la funciónTeleportPlayer(que crearemos en el siguiente paso).
- Haz un
2. Función TeleportPlayer
Crea una nueva función en BP_PortalBase llamada TeleportPlayer.
- Inputs:
PlayerToTeleport(Type:ActorObject Reference)
La lógica dentro de TeleportPlayer:
- Desde
TargetPortal, obtén suTeleportVolume. - Obtén la
World LocationyWorld RotationdelTeleportVolumedelTargetPortal. - Para obtener la dirección correcta hacia la cual mira el jugador después de teletransportarse, podemos usar la
Forward VectordelTeleportVolumedelTargetPortal. - Calcula una
New Locationpara el jugador:TargetPortal'sTeleportVolumeWorld Location+Forward VectordelTeleportVolume* un offset (e.g., 100 unidades) para evitar que el jugador colisione inmediatamente con el portal de destino. - Usa el nodo
Set Actor Location and RotationenPlayerToTeleport. Conecta laNew Locationy laWorld RotationdelTeleportVolumedelTargetPortal.
3. Prevención de Teletransporte Recursivo
Para evitar que el jugador se teletransporte instantáneamente de regreso al portal de origen al aparecer en el portal de destino, necesitamos un pequeño retraso o un sistema de 'cooldown'.
- Añade una variable
bCanTeleport(Type:Boolean, por defectoTrue) a tuThirdPersonCharacterBlueprint. - Cuando el
Cast To ThirdPersonCharactersea exitoso enBP_PortalBase, antes de llamar aTeleportPlayer:- Comprueba
bCanTeleporten el personaje. Si esFalse, no hagas nada. - Si es
True, establecebCanTeleportaFalseen el personaje.
- Comprueba
- En la función
TeleportPlayerdeBP_PortalBase, después deSet Actor Location and Rotation:- Usa un nodo
Delay(e.g., 0.5 segundos). - Después del
Delay, establecebCanTeleportaTrueen el personaje.
- Usa un nodo
Esto evita que el personaje sea teletransportado de vuelta inmediatamente al entrar al volumen del portal de destino.
✨ Efectos Visuales para los Portales (FX)
Un sistema de portales no está completo sin efectos visuales que lo hagan sentir real y mágico.
1. Placeholder de Efectos (Partículas o Niagara)
Crearemos un componente para nuestros FX de portal. Puedes usar el sistema de partículas Cascade o Niagara.
- En
BP_PortalBase, añade un componenteParticle System(oNiagara Component) y nómbraloPortalFX. - Crea un nuevo efecto de partículas básico en
Portals/FX. Por ejemplo, un círculo que emita partículas hacia el centro o hacia afuera. Puedes usar una textura radial como base. - Asigna este sistema de partículas al componente
PortalFX.
2. Control de Activación/Desactivación del FX
Queremos que los efectos se activen o desactiven según el estado del portal.
- Añade una función en
BP_PortalBasellamadaSetPortalActive.- Inputs:
Activate(Type:Boolean)
- Inputs:
- Dentro de
SetPortalActive:- Establece la variable
bIsActiveal valor deActivate. - Si
ActivateesTrue, hazActivate SystemenPortalFX. - Si
ActivateesFalse, hazDeactivate SystemenPortalFX. - También puedes controlar la visibilidad del
PortalFrameaquí si el portal debe aparecer/desaparecer.
- Establece la variable
- En
Event BeginPlay, llama aSetPortalActiveconTruepara que el portal esté activo al inicio.
Ejemplo de un sencillo sistema de partículas
Para un efecto visual básico, puedes crear un nuevo sistema de partículas (Cascade o Niagara) en la carpeta `Portals/FX`.En Cascade:
- Añade un emisor con un
SphereoCylindershape. - Usa un módulo
Velocitypara dirigir las partículas hacia el centro. - Añade un
Color Over Lifepara hacer que las partículas se desvanezcan. - Usa una textura básica de círculo o estrella.
En Niagara, el proceso es similar pero con módulos y flujos de trabajo más potentes. Empieza con una plantilla como 'Radial Burst' y modifica los módulos de color, tamaño y velocidad.
🌍 Colocando y Configurando Portales en el Nivel
Ahora es el momento de poner nuestros portales a prueba en el mundo del juego.
1. Arrastrar Instancias de BP_PortalBase
- Arrastra dos instancias de
BP_PortalBasedesde el Content Browser a tu nivel. NómbralosPortal_AyPortal_B. - Colócalos en lugares distintos pero accesibles.
2. Conexión de Portales
- Selecciona
Portal_Aen tu nivel. - En el panel de
Details, busca la variableTargetPortal. Usa el gotero para seleccionarPortal_Bdel nivel. - Asigna
RenderTexturedePortal_AaRT_PortalView_A. - Selecciona
Portal_B. - En
Details, asignaTargetPortalaPortal_A. - Asigna
RenderTexturedePortal_BaRT_PortalView_B.
3. Asignación de Materiales de Vista
Para que la vista de los portales se muestre correctamente, necesitamos asignar la Material Instance Dynamic correcta a cada PortalFrame.
- Selecciona
Portal_A. - En la sección
DefaultdeDetails, busca el componentePortalFrame. En sus propiedades, busca el elementoMaterialy asignaMI_Portal_A. - Selecciona
Portal_B. - En sus propiedades, busca el componente
PortalFrame. En sus propiedades, busca el elementoMaterialy asignaMI_Portal_B.
🔄 Mejoras y Funcionalidades Adicionales
Nuestro sistema básico de portales ya funciona, pero hay muchas maneras de mejorarlo.
1. Animaciones de Apertura/Cierre
En lugar de que los portales simplemente aparezcan, puedes añadir animaciones para su apertura y cierre.
- Usa
Timelinesen Blueprint para animar la escala delPortalFrameo la intensidad delPortalFX. - Integra estas
Timelinesen la funciónSetPortalActive.
2. Sonidos de Portal
Añade efectos de sonido para cuando un portal se abre, se cierra o cuando el jugador se teletransporta.
- Usa el nodo
Play Sound 2DoPlay Sound at Locationen Blueprint. - Conéctalos a los eventos relevantes (e.g.,
SetPortalActive,TeleportPlayer).
3. Portales Bidireccionales Automáticos
Para simplificar la configuración, puedes hacer que un portal, al asignarle un TargetPortal, automáticamente asigne a sí mismo como TargetPortal del otro portal.
- En
BP_PortalBase, en elConstruction Scripto en un eventoPostEditChangeProperty(solo para el editor), siTargetPortales asignado y no nulo, llama a una función enTargetPortalpara establecer su propioTargetPortalaSelf.
4. Portales Activos Condicionalmente
Quizás los portales solo se activan después de resolver un puzle o encontrar un objeto.
- Crea una interfaz de Blueprint o un
Event Dispatcherpara comunicar cuándo un portal debe activarse. - En el
Event GraphdeBP_PortalBase, llama aSetPortalActivecuando se cumplan las condiciones.
5. Optimización del Scene Capture Component 2D
Los Scene Capture Component 2D pueden ser costosos para el rendimiento. Considera:
- Desactivarlos cuando no estén en la vista del jugador o cuando el portal esté inactivo.
- Reducir la resolución del
Render Targetsi el rendimiento es una preocupación.
📝 Resumen y Próximos Pasos
¡Felicidades! Has construido un sistema de teletransporte con portales dinámicos en Unreal Engine 5. Hemos cubierto desde la configuración básica del Actor hasta la implementación de la lógica de teletransporte y la integración de efectos visuales.
Puntos Clave Cubiertos:
- Creación de
BP_PortalBaseconStatic Mesh,Box CollisionyScene Capture Component 2D. - Manejo de
Render TargetsyMaterial Instancespara las vistas del portal. - Lógica de
On Overlapy teletransporte con prevención de bucles. - Integración de sistemas de partículas para FX.
- Colocación y conexión de portales en el nivel.
¿Qué puedes hacer a continuación?
- Mejorar los FX: Experimenta con sistemas de partículas más complejos o efectos de post-proceso para la vista del portal.
- Sonidos Dinámicos: Añade sonidos posicionales que cambien según la distancia al portal o la vista a través de él.
- Portales Interactivos: Permite al jugador activar/desactivar portales mediante interacción o con objetos específicos.
- Puzles con Portales: Diseña puzles que requieran el uso inteligente de los portales para ser resueltos.
El desarrollo de juegos es un viaje continuo de aprendizaje y experimentación. ¡No tengas miedo de probar nuevas ideas y llevar tu sistema de portales al siguiente nivel!
Tutoriales relacionados
- Creación de un Sistema de Progresión de Habilidades (Skill Tree) en Unreal Engine 5intermediate18 min
- Unreal Engine: Creando un Sistema de Puzzles de Bloques Deslizantes con Blueprintintermediate20 min
- Unreal Engine: Implementando IA Básica con Behaviour Trees y EQS para Enemigosintermediate15 min
- Unreal Engine: Creación de un Sistema de Carga/Guardado de Partidas con SaveGame y Blueprintintermediate18 min
- Unreal Engine: Creando Interactividad con el Sistema de Interacciones Basado en Componentesintermediate15 min
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!