{"id":67281,"date":"2025-05-23T22:41:32","date_gmt":"2025-05-24T03:41:32","guid":{"rendered":"https:\/\/niixer.com\/?p=67281"},"modified":"2025-05-23T23:20:22","modified_gmt":"2025-05-24T04:20:22","slug":"a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion","status":"publish","type":"post","link":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/","title":{"rendered":"A Contrarreloj: Supera el Desaf\u00edo del Tiempo en 3D, Plataformas, Precisi\u00f3n y Presi\u00f3n."},"content":{"rendered":"\n<p><strong>&#8220;A Contrarreloj&#8221; es un videojuego de plataformas 3D, desarrollado en <a href=\"https:\/\/unity.com\/es\">Unity <\/a>como proyecto final del curso de Renderizaci\u00f3n en 3D y Videojuegos.<\/strong> Este t\u00edtulo propone una experiencia din\u00e1mica y desafiante, donde el jugador debe superar una serie de tres niveles dise\u00f1ados con cuidado para ofrecer un equilibrio entre accesibilidad y dificultad progresiva. La esencia del juego radica en la combinaci\u00f3n de la acci\u00f3n contra el tiempo y la exploraci\u00f3n de escenarios flotantes, con una est\u00e9tica futurista que refuerza la atm\u00f3sfera de urgencia. Los jugadores deber\u00e1n recolectar objetos espec\u00edficos en cada nivel antes de que el temporizador se agote, promoviendo la toma r\u00e1pida de decisiones y la precisi\u00f3n en el control del personaje. En caso de no cumplir con el objetivo a tiempo, el juego presenta una pantalla de Game Over, invitando al jugador a intentar nuevamente y perfeccionar su desempe\u00f1o.<\/p>\n\n\n\n<p><strong>Los protagonistas de &#8220;A Contrarreloj&#8221; son dos personajes seleccionables, representando a los autores del proyecto.<\/strong> Esta caracter\u00edstica de selecci\u00f3n de personajes a\u00f1ade un nivel extra de personalizaci\u00f3n y conexi\u00f3n con el juego, permitiendo a los usuarios elegir entre dos avatares \u00fanicos, cada uno con un dise\u00f1o visual que refleja la identidad de los creadores. La mec\u00e1nica permite que el jugador se sumerja en la experiencia desde el men\u00fa inicial, donde la elecci\u00f3n se guarda mediante un script especializado para asegurar que el personaje seleccionado se mantenga activo a lo largo de la partida. La diversidad de personajes no solo aporta variedad visual, sino que tambi\u00e9n contribuye a la narrativa del juego, haciendo que la experiencia sea m\u00e1s atractiva y personalizada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>L\u00f3gica y mec\u00e1nica de juego<\/strong><\/h2>\n\n\n\n<p>La jugabilidad de &#8220;A Contrarreloj&#8221; est\u00e1 basada en una l\u00f3gica sencilla pero efectiva, enfocada en la interacci\u00f3n r\u00e1pida y la gesti\u00f3n del tiempo. Desde el men\u00fa inicial, el jugador tiene la posibilidad de seleccionar entre dos personajes diferentes, implementando un script que guarda esta elecci\u00f3n para que se mantenga consistente a lo largo de toda la partida, evitando as\u00ed la necesidad de seleccionar nuevamente en cada nivel. Esta selecci\u00f3n inicial a\u00f1ade un toque de personalizaci\u00f3n que mejora la experiencia de usuario.<\/p>\n\n\n\n<p>El objetivo principal en cada nivel es claro y directo: recolectar los objetos, que pueden ser monedas o hongos, antes de que el temporizador llegue a cero. Esta mec\u00e1nica genera una sensaci\u00f3n constante de urgencia y presi\u00f3n, obligando al jugador a explorar el entorno de manera eficiente mientras evita perder tiempo en movimientos innecesarios. Si el jugador logra recolectar el objeto dentro del tiempo establecido, autom\u00e1ticamente avanza al siguiente nivel, asegurando un flujo de juego continuo. En caso contrario, el juego carga una pantalla de Game Over, desde donde el usuario puede decidir reiniciar o regresar al men\u00fa principal para intentarlo nuevamente.<\/p>\n\n\n\n<p>La progresi\u00f3n del juego est\u00e1 estructurada en tres niveles, cada uno aumentando ligeramente la dificultad y el desaf\u00edo temporal. Al completar exitosamente los tres niveles dentro del tiempo l\u00edmite, se despliega una pantalla de victoria que reconoce el logro del jugador, ofreciendo una sensaci\u00f3n de culminaci\u00f3n y satisfacci\u00f3n.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Implementaci\u00f3n t\u00e9cnica<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>Men\u00fa principal<\/strong><\/h3>\n\n\n\n<p>El desarrollo del men\u00fa principal se realiza en una escena independiente, dedicada exclusivamente a la navegaci\u00f3n inicial y selecci\u00f3n de opciones. Este men\u00fa contiene elementos clave como el t\u00edtulo del juego, botones con im\u00e1genes ic\u00f3nicas y claras, importadas desde icon-icons.com, que permiten a los jugadores iniciar la partida, seleccionar su personaje preferido y acceder a una secci\u00f3n donde se muestran los cr\u00e9ditos del proyecto. Cada bot\u00f3n est\u00e1 cuidadosamente dise\u00f1ado para ofrecer una experiencia intuitiva y visualmente atractiva, facilitando la interacci\u00f3n y mejorando la usabilidad.<\/p>\n\n\n\n<p>Adem\u00e1s, se incorpora un script de navegaci\u00f3n entre escenas que controla la transici\u00f3n fluida desde el men\u00fa principal hacia el juego o hacia la pantalla de cr\u00e9ditos. Este sistema garantiza que las acciones del usuario se traduzcan en cambios inmediatos dentro del flujo del juego, contribuyendo a una experiencia de usuario coherente y sin interrupciones.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcfCRgxzf7098lg-Z2oR9jWuVI1gs0swgW_KmWKdHfRdkkiBp-pI9Qmtrnq848xuVdDF-BM76HRVC2jgXPP3VBy8PY0_mxQmZJHTNNmiJf56GPWaSls78V_gQvE5lx1ewi4QBQF-A?key=GpWqAZb7RP-sVbkvZSTFqw\" alt=\"\" style=\"width:806px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 1. Men\u00fa principal<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-505-1024x341.png\" alt=\"\" class=\"wp-image-67365\" style=\"width:839px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-505-1024x341.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-505-300x100.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-505-768x256.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-505.png 1166w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 2. Cr\u00e9ditos del videojuego<\/em><\/p>\n\n\n\n<p>Muestra una interfaz centrada en el jugador tres botones interactivos y dise\u00f1o limpio. Cada bot\u00f3n tiene una imagen\/icono con funcionalidad ligada a scripts de navegaci\u00f3n (<code>SceneManager.LoadScene()<\/code>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Importaci\u00f3n y selecci\u00f3n de personajes<\/strong><\/h3>\n\n\n\n<p>En esta etapa del desarrollo, se realiza la importaci\u00f3n de los dos personajes principales, que representan a los autores del proyecto, directamente al entorno de <a href=\"https:\/\/unity.com\/es\">Unity<\/a>. Cada modelo 3D fue cuidadosamente preparado para asegurar compatibilidad con las mec\u00e1nicas del juego y optimizaci\u00f3n en cuanto a rendimiento y calidad visual. Estos personajes sirven como avatares seleccionables para el jugador, brindando una conexi\u00f3n m\u00e1s personal y \u00fanica con la experiencia de juego.<\/p>\n\n\n\n<p>Para permitir la elecci\u00f3n entre ambos personajes, se implementa un script de selecci\u00f3n que se ejecuta en el men\u00fa principal. Este script no solo permite seleccionar visualmente al avatar deseado, sino que tambi\u00e9n guarda esta elecci\u00f3n mediante un sistema de almacenamiento temporal o persistente, de manera que al iniciar la partida se instancie autom\u00e1ticamente el personaje previamente seleccionado en la plataforma de juego. Esta funcionalidad garantiza que la elecci\u00f3n del jugador se mantenga consistente durante toda la sesi\u00f3n, mejorando la experiencia y evitando que se tenga que elegir nuevamente en cada nivel. Adem\u00e1s, el script est\u00e1 dise\u00f1ado para ser f\u00e1cilmente extensible en caso de que se deseen agregar m\u00e1s personajes en futuras actualizaciones.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdpEXxatVrO7GD5EPhys7C1VS_5UgpsFsge_48WiTX7fNedIueqly6i0xOQl1bAN2X2zQt7In2oU04xduJd2Zdd7Q8dR0Pfv85kDooEqvSuleaTz6kjDRktpOyjAcXR4Bf7yRnu1A?key=GpWqAZb7RP-sVbkvZSTFqw\" alt=\"\" style=\"width:820px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 3. Importaci\u00f3n personaje 1<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXd5h4AGaRfil_qHCQHuNe_-BCoEZP84NBl66dhYcMQ_Fz6k4R15LHsWbgY6ZWKNbEgqeYzxP6dnfPSW0cJ5tCQc4tS_R55_f00qf4OsxZ_7u7X6hoXhHVw2ZcuAwjvgqCX1KTDSsg?key=GpWqAZb7RP-sVbkvZSTFqw\" alt=\"\" style=\"width:820px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 4. Importaci\u00f3n personaje <\/em>2<\/p>\n\n\n\n<p>Para la implementaci\u00f3n de los personajes validar el siguiente articulo : <a href=\"https:\/\/niixer.com\/index.php\/2025\/03\/28\/cinematica-en-3d-creacion-de-una-animacion\/\">Principios y Aplicaciones de la Animaci\u00f3n 3D en Blender :Ambiente, Renderizado e Iluminaci\u00f3n<\/a>.<\/p>\n\n\n\n<p>Para la realizaci\u00f3n de las animaci\u00f3nes 3D con Blender y Mixamo revisar el siguiente <a href=\"https:\/\/niixer.com\/index.php\/2025\/03\/29\/animacion-3d-con-blender-y-mixamo\/\">articulo<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/niixer.com\/index.php\/2025\/03\/29\/animacion-3d-con-blender-y-mixamo\/\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. <strong>C\u00e1mara y movimiento<\/strong><\/h3>\n\n\n\n<p>Para lograr una experiencia de juego fluida y din\u00e1mica, se implementa una Cinemachine FreeLook Camera que sigue constantemente al personaje seleccionado por el jugador. Esta c\u00e1mara avanzada permite una visi\u00f3n en tercera persona con rotaci\u00f3n libre, lo que ofrece un control intuitivo y natural sobre el entorno del juego, ayudando al jugador a orientarse f\u00e1cilmente en los escenarios flotantes y complejos.<\/p>\n\n\n\n<p>El control del personaje se realiza a trav\u00e9s del teclado, usando las teclas WASD para el movimiento en las direcciones b\u00e1sicas: adelante, atr\u00e1s, izquierda y derecha. Mientras tanto, la c\u00e1mara responde a la rotaci\u00f3n del mouse, permitiendo al jugador ajustar el \u00e1ngulo de visi\u00f3n libremente alrededor del personaje, lo que facilita la exploraci\u00f3n y la precisi\u00f3n al momento de recolectar objetos o evitar obst\u00e1culos.<\/p>\n\n\n\n<p>Para gestionar estos controles, se utiliza el componente ThirdPersonController, parte del paquete Starter Assets de Unity, que proporciona una base robusta y personalizable para el movimiento y la interacci\u00f3n del personaje con el entorno. Este controlador calcula el movimiento relativo a la direcci\u00f3n actual de la c\u00e1mara, permitiendo que el personaje rote suavemente hacia la direcci\u00f3n en la que se desplaza, creando una sensaci\u00f3n de control realista y una experiencia de juego m\u00e1s inmersiva.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcOvFdd3V-X4H9DoglfgNvYADA-QWVPx9AtLNsDOopEjR4ElFLOixNQWGzY9Sf0MYlY7VWRYlA6_6uvoKz_vOg87D432fD1fQsAiC_-BKqJkMnvcOBCyxvQTQLUeTD3zx1PkGNb1Q?key=GpWqAZb7RP-sVbkvZSTFqw\" alt=\"\" style=\"width:848px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 5. <\/em>Ajuste de c\u00e1mara<\/p>\n\n\n\n<p>La c\u00e1mara est\u00e1 vinculada al objeto <code>PlayerCameraRoot<\/code>. El movimiento se calcula relativo a la direcci\u00f3n de la c\u00e1mara (<code>cameraForward<\/code>, <code>cameraRight<\/code>). El personaje rota hacia la direcci\u00f3n de movimiento.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. <strong>Objetos recolectables<\/strong><\/h3>\n\n\n\n<p>En el juego se emplean dos tipos principales de objetos recolectables que el jugador debe encontrar para avanzar en cada nivel: el hongo y la moneda. El modelo del hongo fue importado directamente como un asset local, dise\u00f1ado por los autores. Por otro lado, la moneda fue descargada desde la plataforma <a href=\"https:\/\/sketchfab.com\/\">Sketchfab<\/a>, una fuente popular de modelos 3D gratuitos y de alta calidad, lo que permiti\u00f3 incorporar un objeto visualmente atractivo y familiar para los jugadores.<\/p>\n\n\n\n<p>Para garantizar que la interacci\u00f3n con estos objetos sea fluida y precisa, cada uno cuenta con componentes de colisi\u00f3n llamados colliders configurados como \u201cisTrigger\u201d. Esto significa que, en lugar de bloquear f\u00edsicamente al personaje, detectan cuando el jugador los atraviesa, lo que activa una serie de eventos dentro del juego.<\/p>\n\n\n\n<p>Estos eventos son gestionados por dos scripts clave: el script <strong>ObjectCollect<\/strong> que se encarga de detectar la colisi\u00f3n entre el jugador y el objeto recolectable, permitiendo as\u00ed que el \u00edtem sea recogido y desaparezca de la escena; y el script <strong>Collection<\/strong>, que mantiene la cuenta de todos los objetos recolectados durante el nivel y actualiza la interfaz de usuario (UI) para reflejar el progreso del jugador en tiempo real. Este sistema asegura una experiencia interactiva y motivadora, alentando al jugador a buscar y recolectar todos los objetos antes de que se acabe el tiempo.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXejn96znL9PzTTVE6sSnREthlc6bjZ1NGNappWEipBzd-kC9w61JVYYXDDZnShfGC-Oh81bKZ34RMuWwXHpicY5l24O5Ol-cMyn_J-LYLHLZLB3LaplkGiq_DzavafcTCzEus_50Q?key=GpWqAZb7RP-sVbkvZSTFqw\" alt=\"\" style=\"width:835px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 6. <\/em> Importaci\u00f3n objeto 1 recolectable<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeQiY3tBzU4Kgy9XgbZpQfYjGbsUGRWzDFYhxh8-dy7ShPWhNFFlDRlAFyFShtSrA4pWA8_WEL5Nz_sjNE0yZRyAyiVah1IMBmoHXvzapFi9Qp8iJkrbKiaAdXNUQP6sJYJzAtnHg?key=GpWqAZb7RP-sVbkvZSTFqw\" alt=\"\" style=\"width:833px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 7. <\/em> Importaci\u00f3n objeto 2 recolectable<\/p>\n\n\n\n<p>Modelos 3D est\u00e1ticos con componentes <code>MeshRenderer<\/code>, <code>Collider(isTrigger)<\/code> y scripts que detectan colisi\u00f3n con <code>Player<\/code> mediante <code>OnTriggerEnter<\/code>.<\/p>\n\n\n\n<p>Para aprender a modelar  estas figuras en <a href=\"https:\/\/www.blender.org\/\">Blender <\/a>3D visitar <a href=\"https:\/\/niixer.com\/wp-admin\/post.php?post=63056&amp;action=edit\">Modelado y texturizado en Blender escena en 3D.<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. <strong>Temporizador y avance de nivel<\/strong><\/h3>\n\n\n\n<p>Cada nivel dentro de &#8220;A Contrarreloj&#8221; comienza con un cron\u00f3metro que marca el tiempo l\u00edmite que el jugador tiene para completar el objetivo: recolectar el objeto designado, ya sea una moneda o un hongo. Este temporizador no solo a\u00f1ade una sensaci\u00f3n constante de urgencia y presi\u00f3n, sino que tambi\u00e9n es un elemento fundamental para la mec\u00e1nica central del juego, reforzando el desaf\u00edo y la necesidad de rapidez y precisi\u00f3n en la ejecuci\u00f3n de las acciones.<\/p>\n\n\n\n<p>La l\u00f3gica de avance de nivel est\u00e1 programada de manera sencilla pero efectiva. Si el jugador logra recoger el objeto antes de que el tiempo se agote, el juego autom\u00e1ticamente carga la siguiente escena usando la funci\u00f3n <code>SceneManager.LoadScene(nivel + 1)<\/code>, permitiendo as\u00ed la progresi\u00f3n directa al siguiente nivel. Esta transici\u00f3n es inmediata y mantiene el ritmo din\u00e1mico del juego, motivando al jugador a continuar y superar el desaf\u00edo.<\/p>\n\n\n\n<p>En contraste, si el jugador no consigue recolectar el objeto dentro del l\u00edmite de tiempo establecido, el juego termina la partida actual y carga la escena de <strong>Game Over<\/strong>. Esta escena especial informa al jugador que ha perdido y generalmente ofrece opciones para reiniciar el nivel o regresar al men\u00fa principal, incentivando as\u00ed la repetici\u00f3n y el perfeccionamiento de las habilidades para superar los niveles en futuras partidas.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. <strong>Pantalla Game Over y final<\/strong><\/h3>\n\n\n\n<p>La pantalla de <strong>Game Over<\/strong> se presenta en una escena independiente que se activa autom\u00e1ticamente cuando el jugador no logra completar el objetivo dentro del tiempo establecido. Esta escena contiene un mensaje claro y visible que informa al jugador que ha perdido la partida, generando una pausa necesaria para que el usuario asimile el resultado. Adem\u00e1s, incluye un sistema de reinicio autom\u00e1tico que, despu\u00e9s de unos segundos, redirige al jugador de vuelta al men\u00fa principal, facilitando que pueda intentar nuevamente sin interrupciones o complicaciones.<\/p>\n\n\n\n<p>Por otro lado, el juego tambi\u00e9n contempla un final positivo para los jugadores que logren superar todos los retos. Al completar exitosamente los tres niveles dentro del tiempo l\u00edmite, se muestra un mensaje especial de victoria. Esta pantalla de victoria ofrece una sensaci\u00f3n de logro y recompensa, motivando al jugador y cerrando la experiencia de juego de manera satisfactoria. La transici\u00f3n a esta escena tambi\u00e9n es autom\u00e1tica y est\u00e1 dise\u00f1ada para destacar el \u00e9xito obtenido, reforzando la narrativa del juego y el sentido de progreso.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdZa7r77ibAlmjeppHS98LgomK-wPcbbhRIOgWQZVyR-n2bqpZ5g0GKu3ZSkFzj8eLYCNUCrEB84sWNO5bRf0IkN6ee32wenHZkzOmTsUn5YZ1o406WajUaNpPK52GVI-Y6cISTUA?key=GpWqAZb7RP-sVbkvZSTFqw\" alt=\"\" style=\"width:800px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 8. <\/em> Pantalla de Game Over<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"338\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-502-1024x338.png\" alt=\"\" class=\"wp-image-67361\" style=\"width:806px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-502-1024x338.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-502-300x99.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-502-768x254.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-502.png 1162w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>Figura 9. <\/em> Pantalla de victoria por nivel<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"350\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-503-1024x350.png\" alt=\"\" class=\"wp-image-67362\" style=\"width:838px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-503-1024x350.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-503-300x102.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-503-768x262.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-503.png 1160w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\">Figura 10. Pantalla de victoria total<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7. <strong>Scripts integrados:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ObjectCollect.cs Detecta colisi\u00f3n y recolecta objeto<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\n\npublic class ObjectCollect : MonoBehaviour\n{\n    private Collection playerCollection;\n\n    void Start()\n    {\n        GameObject player = GameObject.FindGameObjectWithTag(\"Player\");\n\n        if (player != null)\n        {\n            playerCollection = player.GetComponent&lt;Collection>();\n        }\n    }\n\n    private void OnTriggerEnter(Collider other)\n    {\n        if (other.CompareTag(\"Player\") &amp;&amp; playerCollection != null)\n        {\n            playerCollection.Quantity += 1;\n            playerCollection.UpdateCounter();\n            Debug.Log(\"Moneda recolectada por el jugador.\");\n            Destroy(gameObject);\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Collection.cs Muestra contador y valida si se recolectaron todos los objetos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\nusing TMPro;\nusing UnityEngine.SceneManagement;\n\npublic class Collection : MonoBehaviour\n{\n    public int Quantity = 0;\n    public int totalObjects = 3;\n    public TextMeshProUGUI textCount;\n\n    public int nivelActual = 1;\n\n    void Start()\n    {\n        Quantity = 0;\n        UpdateCounter();\n    }\n\n    public void UpdateCounter()\n    {\n        if (textCount != null)\n        {\n            int remaining = totalObjects - Quantity;\n            textCount.text = \"Objetos restantes: \" + remaining;\n\n            if (remaining &lt;= 0)\n            {\n                textCount.text = \"\ufe57odos recolectados!\";\n\n                string personaje = PlayerPrefs.GetString(\"SkinSeleccionada\", \"Daniel\");\n                string mensaje = \"\";\n                if (nivelActual+1 >= 3)\n                {\n                    mensaje = $\"\uff1belicidades {personaje}, haz completado el juego!\";\n                }\n                else\n                {\n                    mensaje = $\"\uff1belicidades {personaje}, nivel completado!\";\n                }\n                string siguienteEscena = \"GameL\" + (nivelActual + 1);\n\n                PlayerPrefs.SetString(\"MensajeNivel\", mensaje);\n                PlayerPrefs.SetString(\"JugadorActivo\", personaje);\n                PlayerPrefs.SetInt(\"NivelActual\", nivelActual);\n                PlayerPrefs.SetString(\"SiguienteEscena\", siguienteEscena);\n\n                SceneManager.LoadScene(\"VictoryScreen\");\n            }\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GameOverManager.cs Muestra la pantalla de derrota<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\nusing UnityEngine.SceneManagement;\n\npublic class GameOverManager : MonoBehaviour\n{\n    public float delay = 5f;\n    public string sceneToLoad = \"MenuPrincipal\";\n\n    void Start()\n    {\n        Invoke(\"LoadNextScene\", delay);\n    }\n\n    void LoadNextScene()\n    {\n        SceneManager.LoadScene(sceneToLoad);\n    }\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VictoryScreenmanager.cs Cambia de escena seg\u00fan eventos del jugador<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\nusing TMPro;\nusing UnityEngine.SceneManagement;\nusing static Cinemachine.DocumentationSortingAttribute;\n\npublic class VictoryScreenManager : MonoBehaviour\n{\n    &#91;Header(\"Referencias UI\")]\n    public TextMeshProUGUI mensajeTMP;\n\n    &#91;Header(\"Configuraci\u00f3n de avance autom\u00e1tico\")]\n    public float delay = 5f;\n\n    private int nivelActual;\n\n    void Start()\n    {\n        string mensaje = PlayerPrefs.GetString(\"MensajeNivel\", \"\u00a1Felicidades, nivel completado!\");\n        string jugador = PlayerPrefs.GetString(\"JugadorActivo\", \"Jugador\");\n        nivelActual = PlayerPrefs.GetInt(\"NivelActual\", 1);\n\n        if (mensajeTMP != null)\n            mensajeTMP.text = mensaje;\n\n        Invoke(nameof(InvocarIrASiguienteNivel), delay);\n    }\n\n    private void InvocarIrASiguienteNivel()\n    {\n        IrASiguienteNivel(nivelActual);\n    }\n\n    public void IrASiguienteNivel(int level)\n    {\n        string nameLevel = \"\";\n        if (level >= 3) {\n            nameLevel = $\"MenuPrincipal\";\n        }\n        else\n        {\n            nameLevel = $\"GameL{level}\";\n        }\n        Debug.Log(nameLevel);\n        string siguienteEscena = PlayerPrefs.GetString(\"SiguienteEscena\", nameLevel);\n        SceneManager.LoadScene(siguienteEscena);\n    }\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MainMenu.cs Selecciona el personaje inicial y lleva a la escena de cr\u00e9ditos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\nusing UnityEngine.SceneManagement;\n\npublic class MainMenu : MonoBehaviour\n{\n    public void JugarDaniel()\n    {\n        PlayerPrefs.SetString(\"SkinSeleccionada\", \"Daniel\");\n        SceneManager.LoadScene(\"GameL1\");\n    }\n\n    public void JugarSebastian()\n    {\n        PlayerPrefs.SetString(\"SkinSeleccionada\", \"Sebastian\");\n        SceneManager.LoadScene(\"GameL1\");\n    }\n\n    public void Creditos()\n    {\n        SceneManager.LoadScene(\"Creditos\");\n    }\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Timelimitreturn.cs Al terminar el tiempo, lleva a la escena de game over<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\nusing TMPro;\nusing UnityEngine.SceneManagement;\n\npublic class TimeLimitReturn : MonoBehaviour\n{\n    &#91;SerializeField] private float timeLimit = 30f;\n    private float currentTime;\n\n    &#91;SerializeField] private TextMeshProUGUI timerText;\n\n    private void Start()\n    {\n        currentTime = timeLimit;\n        UpdateTimeDisplay();\n    }\n\n    private void Update()\n    {\n        currentTime -= Time.deltaTime;\n        \/\/Debug.Log(gameObject.name + \" - Update: Tiempo restante: \" + currentTime);\n        UpdateTimeDisplay();\n\n        if (currentTime &lt;= 0f)\n        {\n            Debug.Log(gameObject.name + \" - Update: \u00a1Tiempo agotado! Fin del juego.\");\n            GamerOver();\n        }\n    }\n\n    public void ResetTimer()\n    {\n        currentTime = timeLimit;\n        UpdateTimeDisplay();\n    }\n\n    public void SetTimeLimit(float newTimeLimit)\n    {\n        timeLimit = newTimeLimit;\n        currentTime = Mathf.Min(currentTime, timeLimit);\n        UpdateTimeDisplay();\n    }\n\n    private void UpdateTimeDisplay()\n    {\n        if (timerText != null)\n        {\n            timerText.text = \"Tiempo: \" + Mathf.CeilToInt(currentTime).ToString();\n        }\n        else\n        {\n            Debug.LogWarning(\"No se ha asignado el componente TextMeshProUGUI al script TimeLimitReturn en \" + gameObject.name);\n        }\n    }\n\n    private void GamerOver()\n    {\n        SceneManager.LoadScene(\"GamerOver\");\n    }\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Playerselector.cs Verifica que jugador seleccionado<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\n\npublic class PlayerSelector : MonoBehaviour\n{\n    public GameObject playerDaniel;\n    public GameObject playerSebastian;\n\n    public GameObject camDaniel;\n    public GameObject camSebastian;\n\n    void Start()\n    {\n        string skin = PlayerPrefs.GetString(\"SkinSeleccionada\");\n\n        playerDaniel.SetActive(false);\n        playerSebastian.SetActive(false);\n        camDaniel.SetActive(false);\n        camSebastian.SetActive(false);\n\n        if (skin == \"Sebastian\")\n        {\n            playerSebastian.SetActive(true);\n            camSebastian.SetActive(true);\n        }\n        else\n        {\n            playerDaniel.SetActive(true);\n            camDaniel.SetActive(true);\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>FallDameg.cs Calcula da\u00f1o de caida<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\nusing UnityEngine.SceneManagement;\n\npublic class FallDamageAndReset : MonoBehaviour\n{\n    &#91;Header(\"Configuraci\u00f3n de Ca\u00edda\")]\n    public float fallThreshold = 5f;  \/\/ Altura m\u00ednima para considerar una ca\u00edda peligrosa\n    public float damageMultiplier = 10f;  \/\/ Multiplicador de da\u00f1o basado en la altura\n\n    private Vector3 initialPosition;  \/\/ Posici\u00f3n inicial para reiniciar\n    private float startFallY;  \/\/ Y de inicio cuando el personaje empieza a caer\n    private bool isFalling = false;  \/\/ Si el personaje est\u00e1 cayendo\n\n    private CharacterController characterController;\n    private Rigidbody rigidBody;\n\n    &#91;Header(\"Sistema de Salud\")]\n    public float maxHealth = 100f;  \/\/ Salud m\u00e1xima\n    private float currentHealth;  \/\/ Salud actual\n\n    private void Awake()\n    {\n        \/\/ Inicializa los componentes\n        characterController = GetComponent&lt;CharacterController>();\n        rigidBody = GetComponent&lt;Rigidbody>();\n\n        \/\/ Guarda la posici\u00f3n inicial del jugador\n        initialPosition = transform.position;\n\n        \/\/ Inicializa la salud actual al valor m\u00e1ximo\n        currentHealth = maxHealth;\n    }\n\n    private void Update()\n    {\n        \/\/ L\u00f3gica de ca\u00edda y reinicio de posici\u00f3n\n        HandleFallDamage();\n    }\n\n    private void HandleFallDamage()\n    {\n        \/\/ Si el personaje est\u00e1 cayendo y no est\u00e1 en el suelo\n        if (!characterController.isGrounded &amp;&amp; !isFalling)\n        {\n            isFalling = true;\n            startFallY = transform.position.y;  \/\/ Guardar la altura inicial\n            Debug.Log(\"&#91;Ca\u00edda] Inicia ca\u00edda desde altura: \" + startFallY);\n        }\n\n        \/\/ Si el personaje toca el suelo y estaba cayendo\n        if (characterController.isGrounded &amp;&amp; isFalling)\n        {\n            isFalling = false;\n            float fallDistance = startFallY - transform.position.y;  \/\/ Calcula la distancia de ca\u00edda\n\n            \/\/ Si la distancia de la ca\u00edda supera el umbral, se reinicia la posici\u00f3n\n            if (fallDistance > fallThreshold)\n            {\n                \/\/ Aplica da\u00f1o basado en la distancia de la ca\u00edda\n                float damage = fallDistance * damageMultiplier;\n                TakeDamage(damage);\n\n                \/\/ Imprime el log de vida\n                Debug.Log(\"&#91;Impacto] Ca\u00edda desde \" + fallDistance.ToString(\"F2\") + \" metros. Da\u00f1o recibido: \" + damage + \". Vida actual: \" + currentHealth);\n\n                \/\/ Reinicia la posici\u00f3n\n                \/\/Debug.Log(\"&#91;Impacto] Ca\u00edda peligrosa, reiniciando la posici\u00f3n...\");\n                \/\/ResetPosition();  \/\/ Llama al m\u00e9todo que reinicia la posici\u00f3n\n\n                GamerOver();\n            }\n            else\n            {\n                Debug.Log(\"&#91;Impacto] Ca\u00edda de \" + fallDistance.ToString(\"F2\") + \" metros. Sin reinicio.\");\n            }\n        }\n    }\n\n    \/\/ M\u00e9todo para aplicar da\u00f1o al jugador\n    private void TakeDamage(float damage)\n    {\n        currentHealth -= damage;\n        currentHealth = Mathf.Max(currentHealth, 0);  \/\/ Asegura que la salud no sea negativa\n    }\n\n    \/\/ M\u00e9todo para reiniciar la posici\u00f3n y rotaci\u00f3n del jugador\n    private void ResetPosition()\n    {\n        \/\/ Aseg\u00farate de desactivar el CharacterController para evitar problemas de colisi\u00f3n durante el reinicio\n        if (characterController != null)\n        {\n            characterController.enabled = false;\n        }\n\n        \/\/ Reinicia la posici\u00f3n y la rotaci\u00f3n\n        transform.position = initialPosition;\n        transform.rotation = Quaternion.identity;  \/\/ Puedes establecer la rotaci\u00f3n deseada\n\n        \/\/ Reactiva el CharacterController despu\u00e9s del reinicio\n        if (characterController != null)\n        {\n            characterController.enabled = true;\n        }\n\n        Debug.Log(\"&#91;Reinicio] Posici\u00f3n reiniciada a: \" + initialPosition);\n    }\n\n    private void GamerOver()\n    {\n        SceneManager.LoadScene(\"GamerOver\");\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>8. Est\u00e9tica y narrativa:<\/strong><\/h3>\n\n\n\n<p>El estilo visual es est\u00e1ndar de unity. El juego transcurre en plataformas suspendidas en el vac\u00edo, con una atm\u00f3sfera de urgencia constante impuesta por el tiempo.<\/p>\n\n\n\n<p><strong>Narrativa:<\/strong><\/p>\n\n\n\n<p><em>\u201cEn un universo fracturado por el tiempo, dos viajeros estelares deben recolectar objetos valiosos antes de que todo colapse.\u201d<\/em><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>9. Video:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ProyectoFinal\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/rk7EUJITDJo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>10. Conclusi\u00f3n:<\/strong><\/h3>\n\n\n\n<p><strong>A Contrarreloj<\/strong> demuestra c\u00f3mo un concepto simple, recolectar un objeto a contrarreloj,  puede dar lugar a un juego completo con selecci\u00f3n de personajes, progresi\u00f3n, dise\u00f1o visual coherente, e integraci\u00f3n t\u00e9cnica s\u00f3lida. Es un proyecto ideal para aprender dise\u00f1o de niveles, programaci\u00f3n orientada a eventos y manejo de escenas en Unity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>11. Cr\u00e9ditos:<\/strong><\/h3>\n\n\n\n<p><strong>Autores<\/strong>: <a href=\"https:\/\/niixer.com\/index.php\/author\/sgarciag4\/\">Sebasti\u00e1n Alberto Garcia Galeano<\/a> y <a href=\"https:\/\/niixer.com\/index.php\/author\/dhernandezc6\/\">Daniel Hern\u00e1ndez Cardenas<\/a><\/p>\n\n\n\n<p><strong>Editor<\/strong>: <a href=\"https:\/\/niixer.com\/?s=Carlos+Iv%C3%A1n+Pinz%C3%B3n\">Master- Ingeniero Carlos Iv\u00e1n Pinz\u00f3n<\/a><\/p>\n\n\n\n<p><strong>C\u00f3digo <\/strong>: UCMV-9<\/p>\n\n\n\n<p><strong>Universidad <\/strong>: <a href=\"https:\/\/www.ucentral.edu.co\/\">Universidad Central<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>12. Referencias<\/strong><\/h4>\n\n\n\n<p>Unity Technologies. (2024). <em>Unity Manual: Unity 2022.3 LTS Documentation<\/em>. <a>https:\/\/docs.unity3d.com\/2022.3\/Documentation\/Manual\/index.html<\/a><\/p>\n\n\n\n<p>Unity Technologies. (2024). <em>Starter Assets \u2013 Third Person Character Controller<\/em> [Paquete de Unity]. Unity Asset Store. <a>https:\/\/assetstore.unity.com\/packages\/essentials\/starter-assets-third-person-character-controller-196526<\/a><\/p>\n\n\n\n<p>Unity Technologies. (2024). <em>Cinemachine Documentation<\/em>. <a>https:\/\/docs.unity3d.com\/Packages\/com.unity.cinemachine@2.8\/manual\/index.html<\/a><\/p>\n\n\n\n<p>Unity Technologies. (2024). <em>TextMeshPro Documentation<\/em>. <a>https:\/\/docs.unity3d.com\/Packages\/com.unity.textmeshpro@3.0\/manual\/index.html<\/a><\/p>\n\n\n\n<p>Sketchfab. (2024). <em>Free 3D Models<\/em>. <a class=\"\" href=\"https:\/\/sketchfab.com\">https:\/\/sketchfab.com<\/a><\/p>\n\n\n\n<p>Ready Player Me. (2024). <em>Crea tu avatar 3D personalizado<\/em>. <a class=\"\" href=\"https:\/\/readyplayer.me\/es\">https:\/\/readyplayer.me\/es<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;A Contrarreloj&#8221; es un videojuego de plataformas 3D, desarrollado en Unity como proyecto final del curso de Renderizaci\u00f3n en 3D y Videojuegos. Este t\u00edtulo propone una experiencia din\u00e1mica y desafiante, donde el jugador debe superar una serie de tres niveles dise\u00f1ados con cuidado para ofrecer un equilibrio entre accesibilidad ySeguir Leyendo<\/p>\n","protected":false},"author":1929,"featured_media":67367,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[77],"tags":[4217,1761,1221,214,66],"class_list":["post-67281","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-videojuegos","tag-3d","tag-animaciom","tag-plataforma","tag-unity","tag-videojuegos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>plataformas 3D contrarreloj<\/title>\n<meta name=\"description\" content=\"Juego de plataformas 3D contrarreloj con selecci\u00f3n de personajes y recolecci\u00f3n de objetos. Desaf\u00eda el tiempo y avanza de nivel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"plataformas 3D contrarreloj\" \/>\n<meta property=\"og:description\" content=\"Juego de plataformas 3D contrarreloj con selecci\u00f3n de personajes y recolecci\u00f3n de objetos. Desaf\u00eda el tiempo y avanza de nivel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/\" \/>\n<meta property=\"og:site_name\" content=\"Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/niixer\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-24T03:41:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-24T04:20:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/Captura_de_pantalla_2025-05-23_223858.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2547\" \/>\n\t<meta property=\"og:image:height\" content=\"1439\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sebastian Alberto Garcia Galeano\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sebastian Alberto Garcia Galeano\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"plataformas 3D contrarreloj","description":"Juego de plataformas 3D contrarreloj con selecci\u00f3n de personajes y recolecci\u00f3n de objetos. Desaf\u00eda el tiempo y avanza de nivel.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/","og_locale":"es_ES","og_type":"article","og_title":"plataformas 3D contrarreloj","og_description":"Juego de plataformas 3D contrarreloj con selecci\u00f3n de personajes y recolecci\u00f3n de objetos. Desaf\u00eda el tiempo y avanza de nivel.","og_url":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/","og_site_name":"Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","article_publisher":"https:\/\/www.facebook.com\/niixer\/","article_published_time":"2025-05-24T03:41:32+00:00","article_modified_time":"2025-05-24T04:20:22+00:00","og_image":[{"width":2547,"height":1439,"url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/Captura_de_pantalla_2025-05-23_223858.png","type":"image\/png"}],"author":"Sebastian Alberto Garcia Galeano","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Sebastian Alberto Garcia Galeano","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/#article","isPartOf":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/"},"author":{"name":"Sebastian Alberto Garcia Galeano","@id":"https:\/\/niixer.com\/#\/schema\/person\/fa10e33a590168804724e246c959eb61"},"headline":"A Contrarreloj: Supera el Desaf\u00edo del Tiempo en 3D, Plataformas, Precisi\u00f3n y Presi\u00f3n.","datePublished":"2025-05-24T03:41:32+00:00","dateModified":"2025-05-24T04:20:22+00:00","mainEntityOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/"},"wordCount":2284,"publisher":{"@id":"https:\/\/niixer.com\/#organization"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/Captura_de_pantalla_2025-05-23_223858.png","keywords":["3d","animaci\u00f3m","plataforma","Unity","Videojuegos"],"articleSection":["Videojuegos"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/","url":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/","name":"plataformas 3D contrarreloj","isPartOf":{"@id":"https:\/\/niixer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/#primaryimage"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/Captura_de_pantalla_2025-05-23_223858.png","datePublished":"2025-05-24T03:41:32+00:00","dateModified":"2025-05-24T04:20:22+00:00","description":"Juego de plataformas 3D contrarreloj con selecci\u00f3n de personajes y recolecci\u00f3n de objetos. Desaf\u00eda el tiempo y avanza de nivel.","breadcrumb":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/#primaryimage","url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/Captura_de_pantalla_2025-05-23_223858.png","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/Captura_de_pantalla_2025-05-23_223858.png","width":2547,"height":1439},{"@type":"BreadcrumbList","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/23\/a-contrarreloj-supera-el-desafio-del-tiempo-en-3d-plataformas-precision-y-presion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/niixer.com\/"},{"@type":"ListItem","position":2,"name":"A Contrarreloj: Supera el Desaf\u00edo del Tiempo en 3D, Plataformas, Precisi\u00f3n y Presi\u00f3n."}]},{"@type":"WebSite","@id":"https:\/\/niixer.com\/#website","url":"https:\/\/niixer.com\/","name":"Portal de noticias de tecnolog\u00eda, ciencia, Android, iOS, Realidad Virtual, Aumentada y Mixta, Videojuegos, computadores, todo lo mas reciente en tecnolog\u00eda","description":"Portal de noticias de tecnolog\u00eda","publisher":{"@id":"https:\/\/niixer.com\/#organization"},"alternateName":"Niixer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/niixer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/niixer.com\/#organization","name":"Niixer","alternateName":"Niixer.com","url":"https:\/\/niixer.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/#\/schema\/logo\/image\/","url":"https:\/\/niixer.com\/wp-content\/uploads\/2022\/08\/logo-niixer-sin-fondo-1.png","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2022\/08\/logo-niixer-sin-fondo-1.png","width":140,"height":140,"caption":"Niixer"},"image":{"@id":"https:\/\/niixer.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/niixer\/","https:\/\/www.instagram.com\/niixer.tecnologia\/"]},{"@type":"Person","@id":"https:\/\/niixer.com\/#\/schema\/person\/fa10e33a590168804724e246c959eb61","name":"Sebastian Alberto Garcia Galeano","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/40a2b506413859871d31280ea1b61042b7f285cc07738d74451c083bebc95c77?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/40a2b506413859871d31280ea1b61042b7f285cc07738d74451c083bebc95c77?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/40a2b506413859871d31280ea1b61042b7f285cc07738d74451c083bebc95c77?s=96&d=mm&r=g","caption":"Sebastian Alberto Garcia Galeano"},"sameAs":["http:\/\/www.niixer.com"],"url":"https:\/\/niixer.com\/index.php\/author\/sgarciag4\/"}]}},"jetpack_featured_media_url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/Captura_de_pantalla_2025-05-23_223858.png","_links":{"self":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/67281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/users\/1929"}],"replies":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/comments?post=67281"}],"version-history":[{"count":5,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/67281\/revisions"}],"predecessor-version":[{"id":67376,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/67281\/revisions\/67376"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media\/67367"}],"wp:attachment":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media?parent=67281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/categories?post=67281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/tags?post=67281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}