{"id":67283,"date":"2025-05-24T08:05:50","date_gmt":"2025-05-24T13:05:50","guid":{"rendered":"https:\/\/niixer.com\/?p=67283"},"modified":"2025-05-24T09:31:41","modified_gmt":"2025-05-24T14:31:41","slug":"ultimo-amanecer-en-unity","status":"publish","type":"post","link":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/","title":{"rendered":"\u00daltimo Amanecer en Unity"},"content":{"rendered":"\n<p>Este proyecto consiste en el desarrollo de un juego en Unity donde el jugador deber\u00e1 recolectar la mayor cantidad posible de monedas mientras es perseguido por hordas de zombis. La mec\u00e1nica central combina acci\u00f3n, evasi\u00f3n y estrategia, ya que cada encuentro con los enemigos reducir\u00e1 la vida del personaje, poniendo en riesgo su supervivencia.<\/p>\n\n\n\n<p>Una de las innovaciones clave del juego es la integraci\u00f3n del sistema <a href=\"https:\/\/niixer.com\/wp-admin\/post.php?post=62242&amp;action=edit\">FaceBuilder<\/a>, que permite al jugador personalizar el rostro del protagonista usando su propia cara. Esto a\u00f1ade un nivel extra de inmersi\u00f3n, haciendo que la experiencia sea m\u00e1s personal y envolvente.<\/p>\n\n\n\n<p>Los zombis est\u00e1n controlados por un sistema de inteligencia artificial que detecta y sigue al jugador de forma din\u00e1mica.Su comportamiento adaptativo y su constante acecho convierten cada partida en un desaf\u00edo diferente, aumentando la tensi\u00f3n y la re jugabilidad del juego.<\/p>\n\n\n\n<p>Aqui presentamos el paso a paso. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso a Paso<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Proceso para dar textura a personaje<\/strong><\/h3>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 1<\/strong><\/h2>\n\n\n\n<p>Cargamos modelo de facebuilder creado<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"906\" height=\"669\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/1-1.png\" alt=\"\" class=\"wp-image-67309\" style=\"width:379px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/1-1.png 906w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/1-1-300x222.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/1-1-768x567.png 768w\" sizes=\"auto, (max-width: 906px) 100vw, 906px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 2<\/strong><\/h2>\n\n\n\n<p>Importamos un modelo con esqueleto desde <a href=\"https:\/\/niixer.com\/?s=Mixamo\">Mixamo<\/a>; luego, le quitamos la cabeza y colocamos la nuestra, tal como se muestra.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"648\" height=\"663\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-467.png\" alt=\"\" class=\"wp-image-67305\" style=\"width:343px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-467.png 648w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-467-293x300.png 293w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><figcaption class=\"wp-element-caption\">Modelo<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 3<\/strong><\/h2>\n\n\n\n<p>Una vez creado el modelo con el que jugaremos en Unity, lo exportamos en formato <a href=\"https:\/\/www.autodesk.com\/products\/fbx\/overview\">FBX <\/a>junto con una copia de sus texturas.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"547\" height=\"568\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-459.png\" alt=\"\" class=\"wp-image-67294\" style=\"width:351px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-459.png 547w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-459-289x300.png 289w\" sizes=\"auto, (max-width: 547px) 100vw, 547px\" \/><figcaption class=\"wp-element-caption\">Exportar<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"247\" height=\"128\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-460.png\" alt=\"\" class=\"wp-image-67289\"\/><figcaption class=\"wp-element-caption\">Rutas<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 4<\/strong><\/h2>\n\n\n\n<p> Vamos a Unity y creamos una scene<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"861\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-464.png\" alt=\"\" class=\"wp-image-67298\" style=\"width:376px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-464.png 902w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-464-300x286.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-464-768x733.png 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><figcaption class=\"wp-element-caption\">Creaci\u00f3n de escena<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 5 terreno en unity<\/strong><\/h2>\n\n\n\n<p>A\u00f1adimos el terreno en Unity<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"580\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-470.png\" alt=\"\" class=\"wp-image-67310\" style=\"width:269px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-470.png 709w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-470-300x245.png 300w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><figcaption class=\"wp-element-caption\">A\u00f1adir Terrero<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"641\" height=\"375\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-471.png\" alt=\"\" class=\"wp-image-67311\" style=\"width:303px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-471.png 641w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-471-300x176.png 300w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><figcaption class=\"wp-element-caption\">Terreno<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 6<\/strong><\/h2>\n\n\n\n<p>Vamos a la Unity Asset Store y descargaremos todos los modelos gratuitos que necesitemos. Como est\u00e1n vinculados a una misma cuenta, podremos acceder a ellos directamente desde Unity.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"348\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image.jpg\" alt=\"\" class=\"wp-image-67300\" style=\"width:542px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image.jpg 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-300x116.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-768x297.jpg 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><figcaption class=\"wp-element-caption\">Asset Store<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 7 importar en unity<\/strong><\/h2>\n\n\n\n<p>Importamos los recursos de la siguiente manera:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"389\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-472.png\" alt=\"\" class=\"wp-image-67312\" style=\"width:267px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-472.png 450w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-472-300x259.png 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><figcaption class=\"wp-element-caption\">Impotar<\/figcaption><\/figure>\n\n\n\n<p>En el apartado MyAssets de Unity veremos todos los agregados, los descargaremos e importaremos.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"642\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-465.png\" alt=\"\" class=\"wp-image-67302\" style=\"width:341px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-465.png 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-465-300x214.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-465-768x547.png 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><figcaption class=\"wp-element-caption\">My assets<\/figcaption><\/figure>\n\n\n\n<p>Aca veremos todo lo importado a Unity<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"331\" height=\"655\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-473.png\" alt=\"\" class=\"wp-image-67313\" style=\"width:194px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-473.png 331w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-473-152x300.png 152w\" sizes=\"auto, (max-width: 331px) 100vw, 331px\" \/><figcaption class=\"wp-element-caption\">Importado<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 8<\/strong><\/h2>\n\n\n\n<p>Importamos un paquete de texturas para el terreno<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"159\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-475.png\" alt=\"\" class=\"wp-image-67315\" style=\"width:527px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-475.png 939w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-475-300x51.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-475-768x130.png 768w\" sizes=\"auto, (max-width: 939px) 100vw, 939px\" \/><figcaption class=\"wp-element-caption\">Texturas <\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 9<\/strong><\/h2>\n\n\n\n<p>Vamos al men\u00fa de edici\u00f3n del terreno<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"636\" height=\"939\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-474.png\" alt=\"\" class=\"wp-image-67314\" style=\"width:242px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-474.png 636w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-474-203x300.png 203w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><figcaption class=\"wp-element-caption\">Terreno<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 10<\/strong><\/h2>\n\n\n\n<p>Una vez en el men\u00fa, arrastramos el material seleccionado al terreno elegido, quedando de la siguiente manera; as\u00ed, nuestros personajes no caer\u00e1n al vac\u00edo.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"902\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-1.jpg\" alt=\"\" class=\"wp-image-67303\" style=\"width:233px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-1.jpg 579w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-1-193x300.jpg 193w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"469\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-477.png\" alt=\"\" class=\"wp-image-67317\" style=\"width:456px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-477.png 939w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-477-300x150.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-477-768x384.png 768w\" sizes=\"auto, (max-width: 939px) 100vw, 939px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 11<\/strong><\/h2>\n\n\n\n<p>Una vez aqu\u00ed, importaremos nuestro modelo a Unity.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"334\" height=\"399\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-479.png\" alt=\"\" class=\"wp-image-67319\" style=\"width:234px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-479.png 334w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-479-251x300.png 251w\" sizes=\"auto, (max-width: 334px) 100vw, 334px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"611\" height=\"212\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-478.png\" alt=\"\" class=\"wp-image-67318\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-478.png 611w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-478-300x104.png 300w\" sizes=\"auto, (max-width: 611px) 100vw, 611px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 12<\/strong><\/h2>\n\n\n\n<p>Arrastramos el modelo y arrastramos la textura de la cabeza hacia el terreno<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"531\" height=\"353\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-480.png\" alt=\"\" class=\"wp-image-67322\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-480.png 531w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-480-300x199.png 300w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 13<\/strong><\/h2>\n\n\n\n<p>De la misma forma haremos uso de los assets importados a Unity para hacer la funcionalidad en tercera persona<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"477\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-2.jpg\" alt=\"\" class=\"wp-image-67320\" style=\"width:512px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-2.jpg 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-2-300x159.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-2-768x407.jpg 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-2-390x205.jpg 390w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 14 <\/strong><\/h2>\n\n\n\n<p>Lo llevamos a nuestra scene y lo acomodamos como procede.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"633\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497.png\" alt=\"\" class=\"wp-image-67350\" style=\"width:579px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497.png 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497-300x211.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497-768x540.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497-130x90.png 130w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 15 <\/strong><\/h2>\n\n\n\n<p>Una vez lo tenemos bien ubicado llevamos nuestro modelo al player Armature.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"289\" height=\"385\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-482.png\" alt=\"\" class=\"wp-image-67327\" style=\"width:283px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-482.png 289w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-482-225x300.png 225w\" sizes=\"auto, (max-width: 289px) 100vw, 289px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 16<\/strong><\/h2>\n\n\n\n<p> Escondemos el modelo rosado en el inspector, desactivamos el modelo para que solo nos quede nuestro modelo<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"901\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-495.png\" alt=\"\" class=\"wp-image-67344\" style=\"width:256px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-495.png 551w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-495-183x300.png 183w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 17 <\/strong><\/h2>\n\n\n\n<p>Ahora pondremos las animaciones a nuestro modelo en Unity<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"419\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-4.jpg\" alt=\"\" class=\"wp-image-67325\" style=\"width:585px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-4.jpg 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-4-300x140.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-4-768x357.jpg 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 18<\/strong><\/h2>\n\n\n\n<p> Usaremos el siguiente paquete que trae modelos de un templo.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"123\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-483.png\" alt=\"\" class=\"wp-image-67326\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-483.png 902w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-483-300x41.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-483-768x105.png 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 19<\/strong><\/h2>\n\n\n\n<p>En los prefabs vamos a ver todos los objetos disponibles<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"519\" height=\"165\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-481.png\" alt=\"\" class=\"wp-image-67321\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-481.png 519w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-481-300x95.png 300w\" sizes=\"auto, (max-width: 519px) 100vw, 519px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"187\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492.png\" alt=\"\" class=\"wp-image-67335\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492.png 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492-300x62.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492-768x159.png 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 20<\/strong><\/h2>\n\n\n\n<p>Agregaremos algunos arboles con el siguiente paquete<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"113\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-485.png\" alt=\"\" class=\"wp-image-67331\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-485.png 902w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-485-300x38.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-485-768x96.png 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 21<\/strong><\/h2>\n\n\n\n<p> Una vez importado tendremos estos modelos<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"187\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492.png\" alt=\"\" class=\"wp-image-67345\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492.png 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492-300x62.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-492-768x159.png 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 22<\/strong><\/h2>\n\n\n\n<p>Una vez elegimos los que deseemos tendremos el siguiente resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"599\" height=\"902\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496.png\" alt=\"\" class=\"wp-image-67339\" style=\"width:373px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496.png 599w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496-199x300.png 199w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 23<\/strong><\/h2>\n\n\n\n<p>Para nuestro juego queremos que los enemigos se muevan solos, por lo que usaremos el&nbsp; NavMeshSurface, de esta manera el reconoce el terreno por el cual se pueden mover los enemigos y de esta manera evitar bugs.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"493\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-487.png\" alt=\"\" class=\"wp-image-67332\" style=\"width:268px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-487.png 396w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-487-241x300.png 241w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 24 <\/strong><\/h2>\n\n\n\n<p>Pondremos las monedas que el Player va recolectar,<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"360\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-3.jpg\" alt=\"\" class=\"wp-image-67324\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-3.jpg 902w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-3-300x120.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-3-768x307.jpg 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 25<\/strong><\/h2>\n\n\n\n<p> Las pondremos en la scene y revisamos que el collaider quede bien ajustado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"266\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-6.jpg\" alt=\"\" class=\"wp-image-67328\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-6.jpg 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-6-300x89.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-6-768x227.jpg 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 26<\/strong><\/h2>\n\n\n\n<p>Dise\u00f1aremos un contador de las monedas que el player atrape y de esta manera podamos ver las que hacen falta.<\/p>\n\n\n\n<p>En el men\u00fa superior vamos a : GameObject &gt; UI &gt; Text &#8211; TextMeshPro.<\/p>\n\n\n\n<p>De esta manera podemos ver en pantalla el contador de las monedas<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"561\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-486.png\" alt=\"\" class=\"wp-image-67330\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-486.png 414w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-486-221x300.png 221w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"359\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-494.png\" alt=\"\" class=\"wp-image-67342\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-494.png 449w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-494-300x240.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 27 <\/strong><\/h2>\n\n\n\n<p>Le ponemos la etiqueta Coin y es importante que tenga el Sphere Collider y el Is Triggr activado<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"294\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-489.png\" alt=\"\" class=\"wp-image-67334\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-489.png 387w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-489-300x228.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"392\" height=\"620\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-490.png\" alt=\"\" class=\"wp-image-67333\" style=\"width:315px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-490.png 392w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-490-190x300.png 190w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 28<\/strong><\/h2>\n\n\n\n<p>Creamos el script que tendr\u00e1 el contador de las monedas y lo asignamos al player armature<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.UI;<\/p>\n\n\n\n<p>using TMPro;<\/p>\n\n\n\n<p>using UnityEngine.SceneManagement;<\/p>\n\n\n\n<p>public class CoinCollector : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public int totalCoins = 8;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private int collectedCoins = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public TMP_Text coinText;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public string nextLevelName;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public GameObject panelCompletado; \/\/ &lt;&#8211; Panel de nivel completado<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateUI();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (panelCompletado != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; panelCompletado.SetActive(false); \/\/ Ocultar al inicio<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void OnTriggerEnter(Collider other)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (other.CompareTag(&#8220;Coin&#8221;))<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collectedCoins++;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destroy(other.gameObject);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateUI();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (collectedCoins &gt;= totalCoins)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Log(&#8220;\u00a1Nivel completado!&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (panelCompletado != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; panelCompletado.SetActive(true); \/\/ Mostrar panel<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time.timeScale = 0f; \/\/ Pausar juego<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void UpdateUI()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (coinText != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coinText.text = &#8220;Monedas: &#8221; + collectedCoins + &#8220;\/&#8221; + totalCoins;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; \/\/ Llama esto desde el bot\u00f3n &#8220;Continuar&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void ContinuarNivel()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time.timeScale = 1f; \/\/ Reanudar tiempo<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(nextLevelName))<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SceneManager.LoadScene(nextLevelName);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 29<\/strong><\/h2>\n\n\n\n<p>Ahora vamos asignarle el panel y el contador de monedas.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"406\" height=\"544\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-493.png\" alt=\"\" class=\"wp-image-67347\" style=\"width:345px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-493.png 406w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-493-224x300.png 224w\" sizes=\"auto, (max-width: 406px) 100vw, 406px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 30<\/strong><\/h2>\n\n\n\n<p>Ahora vamos a crear la barra de salud del player, con este script.<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.Events;<\/p>\n\n\n\n<p>using UnityEngine.SceneManagement;<\/p>\n\n\n\n<p>public class Salud : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float saludInicial;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float saludActual;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public UnityEvent eventoMorir;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public GameObject Derrota;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; saludActual = saludInicial;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Derrota.SetActive(false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void CausarDa\u00f1o(float valor)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; saludActual -= valor;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (saludActual &lt;= 0)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print(&#8220;Muerto !!! -&gt; &#8221; + gameObject.name);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eventoMorir.Invoke();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Derrota.SetActive(true);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time.timeScale = 0f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void Reintentar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print(&#8220;Intentando reiniciar&#8230;&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time.timeScale = 1f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Paso 29. Creamos un objeto vacio y asignamos el script, pondremos el PlayerArmature y el canvas de la barra de vida que tambien tiene este script<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.UI;<\/p>\n\n\n\n<p>public class BarraDeVida : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Salud saludJugador;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Image barraPorcentaje;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Update()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (saludJugador != null &amp;&amp; barraPorcentaje != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float porcentaje = saludJugador.saludActual \/ saludJugador.saludInicial;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; barraPorcentaje.fillAmount = porcentaje;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Cambiar color seg\u00fan el porcentaje<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (porcentaje &gt; 0.6f)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; barraPorcentaje.color = Color.green;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (porcentaje &gt; 0.3f)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; barraPorcentaje.color = Color.yellow;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; barraPorcentaje.color = Color.red;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"395\" height=\"330\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-484.png\" alt=\"\" class=\"wp-image-67323\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-484.png 395w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-484-300x251.png 300w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 31<\/strong><\/h2>\n\n\n\n<p>Ahora crearemos una funci\u00f3n que permitir\u00e1 reintentar cuando el jugador pierda.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"901\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-495.png\" alt=\"\" class=\"wp-image-67340\" style=\"width:233px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-495.png 551w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-495-183x300.png 183w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 3<\/strong>2<\/h2>\n\n\n\n<p>Despu\u00e9s de crear el panel, generamos el texto que se mostrar\u00e1.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"599\" height=\"902\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496.png\" alt=\"\" class=\"wp-image-67338\" style=\"width:298px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496.png 599w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496-199x300.png 199w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 33<\/strong><\/h2>\n\n\n\n<p>Ahora en el inspector<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"359\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-494.png\" alt=\"\" class=\"wp-image-67336\" style=\"width:235px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-494.png 449w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-494-300x240.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 34<\/strong><\/h2>\n\n\n\n<p>Adem\u00e1s, creamos un script que nos permitir\u00e1 reiniciar y avanzar al siguiente nivel.<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.SceneManagement;<\/p>\n\n\n\n<p>using Cinemachine;<\/p>\n\n\n\n<p>public class GameManagerScript : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public GameObject[] personajes;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Transform puntoSpawn;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public CinemachineVirtualCamera camaraVirtual;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public GameOverUI gameOverUI;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int indexSeleccionado = PlayerPrefs.GetInt(&#8220;PersonajeSeleccionado&#8221;, 0);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (indexSeleccionado &gt;= 0 &amp;&amp; indexSeleccionado &lt; personajes.Length)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GameObject personajeInstanciado = Instantiate(personajes[indexSeleccionado], puntoSpawn.position, Quaternion.identity);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (camaraVirtual != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; camaraVirtual.Follow = personajeInstanciado.transform;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; camaraVirtual.LookAt = personajeInstanciado.transform;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.LogWarning(&#8220;No se ha asignado la c\u00e1mara virtual en el inspector.&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.LogError(&#8220;\u00cdndice de personaje fuera de rango.&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void Reintentar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time.timeScale = 1f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void SiguienteNivel()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Log(&#8220;Cargando siguiente nivel&#8230;&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time.timeScale = 1f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int siguienteIndex = SceneManager.GetActiveScene().buildIndex + 1;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (siguienteIndex &lt; SceneManager.sceneCountInBuildSettings)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SceneManager.LoadScene(siguienteIndex);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Log(&#8220;No hay m\u00e1s niveles. Fin del juego.&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (gameOverUI != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gameOverUI.MostrarPantallaFinal();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 35<\/strong><\/h2>\n\n\n\n<p> Ahora vamos a configurar los botones<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"633\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497.png\" alt=\"\" class=\"wp-image-67349\" style=\"width:587px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497.png 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497-300x211.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497-768x540.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-497-130x90.png 130w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 36<\/strong><\/h2>\n\n\n\n<p> Ahora para delimitar y que nuestro personaje no caiga al vac\u00edo, creamos 3 cubos modificando sus dimensiones y los ubicamos de esta manera<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"219\" src=\"blob:https:\/\/niixer.com\/675bc0d2-4ae1-45fd-90ad-57610afac8e8\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 37<\/strong><\/h2>\n\n\n\n<p>Despu\u00e9s de esto, desactivamos el objeto para que deje de ser visible.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"599\" height=\"902\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496.png\" alt=\"\" class=\"wp-image-67346\" style=\"width:357px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496.png 599w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-496-199x300.png 199w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 38<\/strong><\/h2>\n\n\n\n<p>Ahora vamos a crear los enemigos, por lo que importaremos desde Mixamo las animaciones y el modelo con el que vamos a trabajar.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"247\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-5.jpg\" alt=\"\" class=\"wp-image-67337\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-5.jpg 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-5-300x82.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-5-768x211.jpg 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<p>Crearemos 3 Scripts para los distintos enemigos que tendremos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 39<\/strong><\/h2>\n\n\n\n<p> Script para Enemigo base.<\/p>\n\n\n\n<p>using System.Collections;<\/p>\n\n\n\n<p>using System.Collections.Generic;<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>#if UNITY_EDITOR<\/p>\n\n\n\n<p>using UnityEditor;<\/p>\n\n\n\n<p>#endif<\/p>\n\n\n\n<p>public class Enemigo : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Estados estado;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float distanciaseguir;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float distanciaatacar;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float distanciaEscapar;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public bool autoseleccionarTarget = true;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Transform target;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float distancia;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public bool vivo = true;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void Awake()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StartCoroutine(CalcularDistancia());<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(autoseleccionarTarget)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; target = Personaje.singleton.transform;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private void LateUpdate()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checkestado();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private void checkestado()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (estado)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.idle:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Estadoidle();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.Seguir:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transform.LookAt(target, Vector3.up);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Estadoseguir();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.atacar:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Estadoatacar();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.muerto:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Estadomuerto();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void cambiarestado(Estados e)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (e)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.idle:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.Seguir:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.atacar:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Estados.muerto:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vivo = false;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; estado = e;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public virtual void Estadoidle()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(distancia &lt; distanciaseguir)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cambiarestado(Estados.Seguir);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public virtual void Estadoseguir()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(distancia &lt; distanciaatacar)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cambiarestado(Estados.atacar);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (distancia &gt; distanciaEscapar)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cambiarestado(Estados.idle);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public virtual void Estadoatacar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (distancia &gt; distanciaatacar + 0.4f)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cambiarestado(Estados.Seguir);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public virtual void Estadomuerto()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; IEnumerator CalcularDistancia()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (vivo)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield return new WaitForSeconds(0.2f);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (target != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distancia = Vector3.Distance(transform.position, target.position);&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>public enum Estados<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; idle = 0,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Seguir = 1,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; atacar = 2,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; muerto = 3<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Y tambien necesitamos de este<\/p>\n\n\n\n<p>using System.Collections;<\/p>\n\n\n\n<p>using System.Collections.Generic;<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.AI;<\/p>\n\n\n\n<p>[RequireComponent(typeof(NavMeshAgent))]<\/p>\n\n\n\n<p>public class Enemigo0orco : Enemigo<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private UnityEngine.AI.NavMeshAgent agente;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Animator animaciones;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float da\u00f1o = 3;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private void Awake()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Awake();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente = GetComponent&lt;UnityEngine.AI.NavMeshAgent&gt;();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadoidle()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadoidle();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetFloat(&#8220;velocidad&#8221;,0);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;atacando&#8221;,false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(transform.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadoseguir()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadoseguir();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetFloat(&#8220;velocidad&#8221;,1);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;atacando&#8221;,false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(target.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadoatacar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadoatacar();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetFloat(&#8220;velocidad&#8221;,0);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;atacando&#8221;,true);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(transform.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transform.LookAt(target, Vector3.up);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadomuerto()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadomuerto();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;vivo&#8221;,false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.enabled = false;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; [ContextMenu(&#8220;Matar&#8221;)]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void Matar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cambiarestado(Estados.muerto);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void Atacar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Personaje.singleton.salud.CausarDa\u00f1o(da\u00f1o);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 40<\/strong><\/h2>\n\n\n\n<p> Modificamos los datos seleccionados con la flecha<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"344\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-9.jpg\" alt=\"\" class=\"wp-image-67348\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-9.jpg 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-9-300x115.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-9-768x293.jpg 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 4<\/strong>1<\/h2>\n\n\n\n<p><strong> Enemigo patrullero Script<\/strong><\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.AI;<\/p>\n\n\n\n<p>[RequireComponent(typeof(NavMeshAgent))]<\/p>\n\n\n\n<p>public class Patrullaje : Enemigo<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private UnityEngine.AI.NavMeshAgent agente;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Animator animaciones;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Transform[] CheckPoints;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private int indice;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float distanciaCheckpoints;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private float distanciaCheckpoints2;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float da\u00f1o = 3;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private void Awake()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Awake();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente = GetComponent&lt;UnityEngine.AI.NavMeshAgent&gt;();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distanciaCheckpoints2 = distanciaCheckpoints * distanciaCheckpoints;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadoidle()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadoidle();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetFloat(&#8220;velocidad&#8221;,1);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;atacando&#8221;,false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(CheckPoints[indice].position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((CheckPoints[indice].position &#8211; transform.position).sqrMagnitude &lt; distanciaCheckpoints2)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indice&nbsp; = (indice + 1) % CheckPoints.Length;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadoseguir()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadoseguir();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetFloat(&#8220;velocidad&#8221;,1);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;atacando&#8221;,false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(target.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadoatacar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadoatacar();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetFloat(&#8220;velocidad&#8221;,0);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;atacando&#8221;,true);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(transform.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transform.LookAt(target, Vector3.up);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public override void Estadomuerto()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Estadomuerto();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(animaciones!=null) animaciones.SetBool(&#8220;vivo&#8221;,false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.enabled = false;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; [ContextMenu(&#8220;Matar&#8221;)]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void Matar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cambiarestado(Estados.muerto);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void Atacar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Personaje.singleton.salud.CausarDa\u00f1o(da\u00f1o);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 42<\/strong><\/h2>\n\n\n\n<p>Modificaremos los puntos por los cuales se mover\u00e1 el enemigo. Los \u201ccheckpoints\u201d ser\u00e1n objetos vac\u00edos que ubicaremos en las posiciones por donde queremos que pase.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"284\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-7.jpg\" alt=\"\" class=\"wp-image-67341\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-7.jpg 902w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-7-300x94.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-7-768x242.jpg 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 43<\/strong><\/h2>\n\n\n\n<p> Crear enemigo perseguidor<\/p>\n\n\n\n<p>Creamos el script<\/p>\n\n\n\n<p>using System.Collections;<\/p>\n\n\n\n<p>using System.Collections.Generic;<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.AI;<\/p>\n\n\n\n<p>public class Perseguidor : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Transform objetivo;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public NavMeshAgent agente;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Animator animador;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float distanciaAtaque = 2.0f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public float da\u00f1o = 3f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private float tiempoEntreAtaques = 1.5f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private float tiempoProximoAtaque = 0f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (objetivo == null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GameObject jugador = GameObject.FindGameObjectWithTag(&#8220;Player&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (jugador != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objetivo = jugador.transform;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Update()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (objetivo == null) return;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float distancia = Vector3.Distance(transform.position, objetivo.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (distancia &gt; distanciaAtaque)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(objetivo.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (animador != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; animador.SetFloat(&#8220;velocidad&#8221;, agente.velocity.magnitude);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; animador.SetBool(&#8220;atacando&#8221;, false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; agente.SetDestination(transform.position); \/\/ se detiene<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transform.LookAt(objetivo);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (animador != null)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; animador.SetFloat(&#8220;velocidad&#8221;, 0);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; animador.SetBool(&#8220;atacando&#8221;, true);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Time.time &gt;= tiempoProximoAtaque)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Atacar();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tiempoProximoAtaque = Time.time + tiempoEntreAtaques;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Atacar()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Aqu\u00ed puedes acceder a la salud del jugador si tienes un sistema<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (objetivo.TryGetComponent&lt;Salud&gt;(out Salud saludJugador))<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; saludJugador.CausarDa\u00f1o(da\u00f1o);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Log(&#8220;\u00a1Atacando al jugador!&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 44<\/strong><\/h2>\n\n\n\n<p>Una vez creado, asignamos el script al enemigo y configuramos los objetos correspondientes en el inspector.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"324\" height=\"585\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-491.png\" alt=\"\" class=\"wp-image-67343\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-491.png 324w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-491-166x300.png 166w\" sizes=\"auto, (max-width: 324px) 100vw, 324px\" \/><\/figure>\n\n\n\n<p>Es importante mencionar que se debe agregar el componente <strong>Nav Mesh Agent<\/strong> para que todo lo que se implemente funcione correctamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 45<\/strong><\/h2>\n\n\n\n<p>Se agregar\u00e1 m\u00fasica o sonidos tanto para los enemigos como para el juego en general.<br>Para el entorno del juego, creamos un objeto vac\u00edo al que le asignamos el sonido que hayamos descargado.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"265\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-8.jpg\" alt=\"\" class=\"wp-image-67351\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-8.jpg 901w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-8-300x88.jpg 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-8-768x226.jpg 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"54\" height=\"54\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-488.png\" alt=\"\" class=\"wp-image-67329\"\/><\/figure>\n\n\n\n<p>Para crear la selecci\u00f3n de personajes<\/p>\n\n\n\n<p>Creamos el script<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.SceneManagement;<\/p>\n\n\n\n<p>public class SelectorPersonajes : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public GameObject[] personajesDisponibles;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Transform puntoSpawn;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private int indiceSeleccionado = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostrarPersonaje(indiceSeleccionado);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void MostrarPersonaje(int indice)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Destruye el personaje anterior si existe<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (Transform hijo in puntoSpawn)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destroy(hijo.gameObject);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Instancia el nuevo personaje<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GameObject personaje = Instantiate(personajesDisponibles[indice], puntoSpawn.position, Quaternion.identity);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; personaje.transform.parent = puntoSpawn;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void SiguientePersonaje()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indiceSeleccionado = (indiceSeleccionado + 1) % personajesDisponibles.Length;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostrarPersonaje(indiceSeleccionado);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void PersonajeAnterior()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indiceSeleccionado = (indiceSeleccionado &#8211; 1 + personajesDisponibles.Length) % personajesDisponibles.Length;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostrarPersonaje(indiceSeleccionado);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void ConfirmarSeleccion()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlayerPrefs.SetInt(&#8220;personajeSeleccionado&#8221;, indiceSeleccionado);<\/p>\n\n\n\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SceneManager.LoadScene(&#8220;Juego&#8221;);<\/p>\n\n\n\n<p> \/\/ Cambia por el nombre de tu escena de juego<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 46&nbsp;<\/strong><\/h2>\n\n\n\n<p>Sonido para enemigos, agregamos el componente del sonido preferido al enemigo y ajustamos volumen&nbsp;&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"297\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-500.png\" alt=\"\" class=\"wp-image-67358\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-500.png 601w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-500-300x148.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 47\u00a0 creaci\u00f3n de escena en unity<\/strong><\/h2>\n\n\n\n<p>\u00a0Inicio de juego, creamos una escena nueva\u00a0\u00a0<\/p>\n\n\n\n<p>Para crear la selecci\u00f3n de personajes&nbsp;&nbsp;<\/p>\n\n\n\n<p>Creamos el script&nbsp;<\/p>\n\n\n\n<p>using UnityEngine;&nbsp;<\/p>\n\n\n\n<p>using UnityEngine.SceneManagement;&nbsp;<\/p>\n\n\n\n<p>public class SelectorPersonajes : MonoBehaviour&nbsp;<\/p>\n\n\n\n<p>{&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public GameObject[] personajesDisponibles;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public Transform puntoSpawn;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; private int indiceSeleccionado = 0;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void Start()&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostrarPersonaje(indiceSeleccionado);&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void MostrarPersonaje(int indice)&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Destruye el personaje anterior si existe&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (Transform hijo in puntoSpawn)&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destroy(hijo.gameObject);&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Instancia el nuevo personaje&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GameObject personaje = Instantiate(personajesDisponibles[indice], puntoSpawn.position, Quaternion.identity);&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; personaje.transform.parent = puntoSpawn;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void SiguientePersonaje()&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indiceSeleccionado = (indiceSeleccionado + 1) % personajesDisponibles.Length;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostrarPersonaje(indiceSeleccionado);&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void PersonajeAnterior()&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indiceSeleccionado = (indiceSeleccionado &#8211; 1 + personajesDisponibles.Length) % personajesDisponibles.Length;&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostrarPersonaje(indiceSeleccionado);&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public void ConfirmarSeleccion()&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; {&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlayerPrefs.SetInt(&#8220;personajeSeleccionado&#8221;, indiceSeleccionado);&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SceneManager.LoadScene(&#8220;Juego&#8221;); \/\/ Cambia por el nombre de tu escena de juego&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>}&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Paso 48&nbsp;<\/strong><\/h2>\n\n\n\n<p>Una vez creado el script, creamos el canvas, importamos los players y asignamos el script, configurando as\u00ed los botones.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"246\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-499.png\" alt=\"\" class=\"wp-image-67357\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-499.png 601w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-499-300x123.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"385\" height=\"102\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498.png\" alt=\"\" class=\"wp-image-67354\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498.png 385w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498-300x79.png 300w\" sizes=\"auto, (max-width: 385px) 100vw, 385px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"385\" height=\"102\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498.png\" alt=\"\" class=\"wp-image-67356\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498.png 385w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498-300x79.png 300w\" sizes=\"auto, (max-width: 385px) 100vw, 385px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"385\" height=\"102\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498.png\" alt=\"\" class=\"wp-image-67355\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498.png 385w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/image-498-300x79.png 300w\" sizes=\"auto, (max-width: 385px) 100vw, 385px\" \/><\/figure>\n\n\n\n<p>El desarrollo de este juego en Unity representa una experiencia completa de dise\u00f1o interactivo, combinando mec\u00e1nicas de supervivencia, recolecci\u00f3n de objetos y personalizaci\u00f3n avanzada del personaje mediante FaceBuilder. La implementaci\u00f3n de inteligencia artificial para los enemigos agrega un nivel de realismo y dificultad que mantiene al jugador constantemente alerta.<\/p>\n\n\n\n<p>Este proyecto no solo demuestra habilidades t\u00e9cnicas en programaci\u00f3n y dise\u00f1o 3D, sino que tambi\u00e9n destaca la importancia de la inmersi\u00f3n y la personalizaci\u00f3n en los videojuegos modernos. Al permitir que los jugadores vean su propio rostro en el protagonista, se refuerza el v\u00ednculo emocional con el juego y se potencia la experiencia interactiva.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Resultado Final juego en unity:<\/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=\"Ultimo amanecer en Unity\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/ZTBIdfuY5iw?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<h3 class=\"wp-block-heading\">Cr\u00e9ditos<\/h3>\n\n\n\n<p><strong>Autor <\/strong>:<a href=\"https:\/\/niixer.com\/?s=daniela+caterine+quintero+aguilera\"> Daniela Caterine Quintero Aguilera<\/a> <a href=\"https:\/\/niixer.com\/index.php\/author\/camilo-uribe\/\">y Juan Camilo Uribe Franco<\/a><\/p>\n\n\n\n<p><strong>Editor: <\/strong><a href=\"https:\/\/niixer.com\/?s=Magister+e+ingeniero+Carlos+Iv%C3%A1n+Pinz%C3%B3n+Romero\">Magister e ingeniero Carlos Iv\u00e1n Pinz\u00f3n Romero<\/a><\/p>\n\n\n\n<p><strong>C\u00f3digo: <\/strong><a href=\"https:\/\/niixer.com\/?s=UCCG1-9\">UCCG1-9<\/a><\/p>\n\n\n\n<p><strong>Universidad:<\/strong> <a href=\"https:\/\/niixer.com\/?s=Universidad+Central\">Universidad Central<\/a><\/p>\n\n\n\n<p>Referecias<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Adobe Systems Incorporated. (s.f.). Mixamo. https:\/\/www.mixamo.com\/ <br><br>IRulosso.2024. \u00a1C\u00f3mo Crear un Personaje en Unity 3D! (F\u00e1cil y R\u00e1pido). [Video]. YouTube. https:\/\/www.youtube.com\/watch?v=FURegpjm9sY <br><br>LuisCanary. 2020, abril 25. Generar ejecutable de tu Videojuego con Unity\/Sacar .exe o .apk para PC o Android\/Compilar. [Video]. YouTube. https:\/\/www.youtube.com\/watch <br><br>Morion Tutoriales (Morion VO) 2022, mayo 1. Personaje en tercera persona Unity [Video]. YouTube. https:\/\/www.youtube.com\/watch?v=dltY_3nMZPo <br><br>Morion Tutoriales (Morion VO) 2023, septiembre 25. IA para enemigos en Unity - Cap 1  [Video]. YouTube. https:\/\/www.youtube.com\/watch?v=pKMp_MKIamc&amp;list=PLjCKKt9GhZuK7mSzeecIeANnjrt7YEqi8&amp;index=1 <br><br>Maty Dev. 2024, marzo 24. El MEJOR TUTORIAL de selector de personajes de UNITY [Video]. YouTube. https:\/\/www.youtube.com\/watch?v=R9ywZcMdMoU <br><br>Pixabay. (s.f.). Efectos de sonido de bosque horror - b\u00fasqueda. https:\/\/pixabay.com\/es\/sound-effects\/search\/bosque-horror\/ <br><br>Unity Technologies. (s.f.). Unity Asset Store. https:\/\/assetstore.unity.com\/ <\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Este proyecto consiste en el desarrollo de un juego en Unity donde el jugador deber\u00e1 recolectar la mayor cantidad posible de monedas mientras es perseguido por hordas de zombis. La mec\u00e1nica central combina acci\u00f3n, evasi\u00f3n y estrategia, ya que cada encuentro con los enemigos reducir\u00e1 la vida del personaje, poniendoSeguir Leyendo<\/p>\n","protected":false},"author":20,"featured_media":67476,"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":[1944,1768,36,4230,30,1945,77],"tags":[4217,1351,214,342,4273],"class_list":["post-67283","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-3d","category-animacion","category-inteligencia-artificial","category-mixamo","category-niixer","category-texturizado","category-videojuegos","tag-3d","tag-facebuilder","tag-unity","tag-videojuego","tag-zombies"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u00daltimo Amanecer en Unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos<\/title>\n<meta name=\"description\" content=\"Desarrollo de un juego en Unity donde el jugador deber\u00e1 recolectar monedas mientras es perseguido por zombis seria su ultimo amanecer.\" \/>\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\/24\/ultimo-amanecer-en-unity\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00daltimo Amanecer en Unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos\" \/>\n<meta property=\"og:description\" content=\"Desarrollo de un juego en Unity donde el jugador deber\u00e1 recolectar monedas mientras es perseguido por zombis seria su ultimo amanecer.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/\" \/>\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-24T13:05:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-24T14:31:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/CompressJPEG.Online_img1280x720.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daniela Caterine Quintero Aguilera\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniela Caterine Quintero Aguilera\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u00daltimo Amanecer en Unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","description":"Desarrollo de un juego en Unity donde el jugador deber\u00e1 recolectar monedas mientras es perseguido por zombis seria su ultimo amanecer.","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\/24\/ultimo-amanecer-en-unity\/","og_locale":"es_ES","og_type":"article","og_title":"\u00daltimo Amanecer en Unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","og_description":"Desarrollo de un juego en Unity donde el jugador deber\u00e1 recolectar monedas mientras es perseguido por zombis seria su ultimo amanecer.","og_url":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/","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-24T13:05:50+00:00","article_modified_time":"2025-05-24T14:31:41+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/CompressJPEG.Online_img1280x720.jpg","type":"image\/jpeg"}],"author":"Daniela Caterine Quintero Aguilera","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Daniela Caterine Quintero Aguilera","Tiempo de lectura":"22 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/#article","isPartOf":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/"},"author":{"name":"Daniela Caterine Quintero Aguilera","@id":"https:\/\/niixer.com\/#\/schema\/person\/b95d6040ef3adee00af40df6e8843618"},"headline":"\u00daltimo Amanecer en Unity","datePublished":"2025-05-24T13:05:50+00:00","dateModified":"2025-05-24T14:31:41+00:00","mainEntityOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/"},"wordCount":5582,"publisher":{"@id":"https:\/\/niixer.com\/#organization"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/CompressJPEG.Online_img1280x720.jpg","keywords":["3d","Facebuilder","Unity","videojuego","Zombies"],"articleSection":["3D","Animaci\u00f3n","Inteligencia Artificial","Mixamo","Niixer","Texturizado","Videojuegos"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/","url":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/","name":"\u00daltimo Amanecer en Unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","isPartOf":{"@id":"https:\/\/niixer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/#primaryimage"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/CompressJPEG.Online_img1280x720.jpg","datePublished":"2025-05-24T13:05:50+00:00","dateModified":"2025-05-24T14:31:41+00:00","description":"Desarrollo de un juego en Unity donde el jugador deber\u00e1 recolectar monedas mientras es perseguido por zombis seria su ultimo amanecer.","breadcrumb":{"@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/#primaryimage","url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/CompressJPEG.Online_img1280x720.jpg","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/CompressJPEG.Online_img1280x720.jpg","width":1280,"height":720,"caption":"Juego"},{"@type":"BreadcrumbList","@id":"https:\/\/niixer.com\/index.php\/2025\/05\/24\/ultimo-amanecer-en-unity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/niixer.com\/"},{"@type":"ListItem","position":2,"name":"\u00daltimo Amanecer en Unity"}]},{"@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\/b95d6040ef3adee00af40df6e8843618","name":"Daniela Caterine Quintero Aguilera","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/69fca747981d3cfc1510ab71de19e220610b80b48ed0bc983d0bd76abb5db67d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/69fca747981d3cfc1510ab71de19e220610b80b48ed0bc983d0bd76abb5db67d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/69fca747981d3cfc1510ab71de19e220610b80b48ed0bc983d0bd76abb5db67d?s=96&d=mm&r=g","caption":"Daniela Caterine Quintero Aguilera"},"sameAs":["http:\/\/www.niixer.com"],"url":"https:\/\/niixer.com\/index.php\/author\/dquinteroa3\/"}]}},"jetpack_featured_media_url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/05\/CompressJPEG.Online_img1280x720.jpg","_links":{"self":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/67283","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\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/comments?post=67283"}],"version-history":[{"count":7,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/67283\/revisions"}],"predecessor-version":[{"id":67481,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/67283\/revisions\/67481"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media\/67476"}],"wp:attachment":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media?parent=67283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/categories?post=67283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/tags?post=67283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}