{"id":74329,"date":"2025-11-26T20:53:27","date_gmt":"2025-11-27T01:53:27","guid":{"rendered":"https:\/\/niixer.com\/?p=74329"},"modified":"2025-11-28T15:38:00","modified_gmt":"2025-11-28T20:38:00","slug":"desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity","status":"publish","type":"post","link":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/","title":{"rendered":"Desarrollo de videojuego de laberinto haciendo uso del motor unity"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-803-1024x576.png\" alt=\"\" class=\"wp-image-74330\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-803-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-803-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-803-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-803-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-803.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Creaci\u00f3n del cielo y c\u00f3mo oscurecer el mapa:<\/strong><\/h2>\n\n\n\n<p>Para comenzar, se descarga un paquete de skybox desde la Asset Store (&#8220;AllSky Free \u2013 10 Sky \/ Skybox Set&#8221;). Para ello:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Se accede a window\/Package Manager y se selecciona la pesta\u00f1a <strong>My Assets<\/strong>. Adem\u00e1s,  para buscar el asset seleccionado.<\/li>\n\n\n\n<li>Una vez descargado se importa el paquete explorando en la carpeta del skybox y se arrastra el material seleccionado hacia la escena para asignarlo como fondo del mapa.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-804-1024x577.png\" alt=\"\" class=\"wp-image-74331\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-804-1024x577.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-804-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-804-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-804-1536x865.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-804.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A continuaci\u00f3n,para oscurecer la escena se modifica la configuraci\u00f3n de iluminaci\u00f3n desde Window\/Rendering\/Lighting Settings. All\u00ed se selecciona el skybox descargado en el campo <strong>Environment Lighting<\/strong>, y luego se genera la iluminaci\u00f3n presionando <em>Generate Lighting<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"614\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-805-1024x614.png\" alt=\"\" class=\"wp-image-74332\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-805-1024x614.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-805-300x180.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-805-768x461.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-805.png 1275w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Buscar los assets y descargarlos e importarlos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-806-1024x567.png\" alt=\"\" class=\"wp-image-74333\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-806-1024x567.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-806-300x166.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-806-768x425.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-806-1536x851.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-806.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ajustar la intensidad y el color ambiente se ajustan seleccionando la luz direccional principal, modificando sus valores de Intensity, <em>Filter<\/em> y <em>Color<\/em>, logrando as\u00ed la apariencia nocturna deseada<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-807-1024x577.png\" alt=\"\" class=\"wp-image-74334\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-807-1024x577.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-807-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-807-768x433.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-807-1536x866.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-807.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Para oscurecer el mapa nos vamos a la ruta que se muestra en la imagen<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"246\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-808-1024x246.png\" alt=\"\" class=\"wp-image-74335\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-808-1024x246.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-808-300x72.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-808-768x184.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-808.png 1171w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Se debe seleccionar la bolita que tenemos en lighting settings y buscar la del cielo que escogimos. le damos en generate y la luz de nuestro mapa estar\u00e1 implementada.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-809-1024x576.png\" alt=\"\" class=\"wp-image-74336\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-809-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-809-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-809-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-809-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-809.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Se debe oscurecer m\u00e1s la luz, primero seleccionamos la luz del mapa, nos vamos a emisi\u00f3n y en filter ajustamos el color que queremos la luz y la intensidad de esta.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"502\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-810-1024x502.png\" alt=\"\" class=\"wp-image-74337\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-810-1024x502.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-810-300x147.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-810-768x377.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-810-1536x754.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-810.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Del mismo modo, que se hizo el proceso de implementaci\u00f3n del cielo se implementa la linterna.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"475\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-811-1024x475.png\" alt=\"\" class=\"wp-image-74338\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-811-1024x475.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-811-300x139.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-811-768x356.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-811.png 1097w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Se agrega en el personaje&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"589\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-812-1024x589.png\" alt=\"\" class=\"wp-image-74339\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-812-1024x589.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-812-300x173.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-812-768x442.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-812-1536x884.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-812.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>La forma como se agregar el efecto de la linterna, le damos click derecho, light y seleccionamos light y despu\u00e9s spotlight, la a\u00f1adimos en nuestro jugador.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-813-1024x576.png\" alt=\"\" class=\"wp-image-74340\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-813-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-813-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-813-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-813-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-813.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Como recomendaci\u00f3n adicional, a\u00f1adir una pared para que la luz refleje para poder ajustar bien el tema de la luz, como primera cosa ajustamos el rango en rango para que ajustar el rango de visi\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-814-1024x556.png\" alt=\"\" class=\"wp-image-74341\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-814-1024x556.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-814-300x163.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-814-768x417.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-814.png 1050w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Y en intensidad ajustamos la intensidad de la luz.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"592\" height=\"128\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-815.png\" alt=\"\" class=\"wp-image-74342\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-815.png 592w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-815-300x65.png 300w\" sizes=\"auto, (max-width: 592px) 100vw, 592px\" \/><\/figure>\n\n\n\n<p>En shape podemos ajustar la forma en que se ve la luz solo tenemos que mover la semiesfera de la derecha para ajustarla. y la otra semiesfera del lado izquierdo es para ajustar la suavidad del efecto si lo ponemos muy cerca de la otra esfera se ver\u00e1 un c\u00edrculo pero si lo alejamos pues se ver el efecto de linterna.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"402\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-816-1024x402.png\" alt=\"\" class=\"wp-image-74344\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-816-1024x402.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-816-300x118.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-816-768x301.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-816-1536x603.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-816.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Y ahora el paquete de la linterna tiene tambi\u00e9n incluido unas cookies que nos sirven para dar el efecto de una linterna, ponemos la que queramos y la ponemos en cookie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Creaci\u00f3n de la IA del enemigo:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-817-1024x576.png\" alt=\"\" class=\"wp-image-74345\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-817-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-817-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-817-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-817-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-817.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>En primer lugar se descarga el modelo de mixamo.<\/p>\n\n\n\n<p>Antes de ponerlo dentro del mapa, debemos irnos a rig y despu\u00e9s pasar el Animation type a humanoid y tambi\u00e9n de paso volver a descargar el modelo varias veces pero esta vez con las animaciones que necesitemos. estos modelos de animaci\u00f3n debemos pasarlos a legacy en animation type.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"298\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-818-1024x298.png\" alt=\"\" class=\"wp-image-74346\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-818-1024x298.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-818-300x87.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-818-768x224.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-818.png 1418w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Luego, se selecciona el modelo descargado y se identifica la animaci\u00f3n deseada, que siempre aparece con un icono triangular. Se duplica usando Ctrl + D y luego se puede eliminar el modelo, quedando solo la animaci\u00f3n copiada en el proyecto para ser usada de manera independiente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"832\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-819-1024x832.png\" alt=\"\" class=\"wp-image-74347\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-819-1024x832.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-819-300x244.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-819-768x624.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-819.png 1328w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s se selecciona al enemigo dentro de la escena y se elimina su componente Animator. Se agrega en cambio un componente llamado <strong>Animation<\/strong>, el cual permite asignar manualmente animaciones espec\u00edficas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"575\" height=\"358\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-820.png\" alt=\"\" class=\"wp-image-74348\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-820.png 575w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-820-300x187.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/figure>\n\n\n\n<p>Se a\u00f1ade el componente <em>NavMeshAgent<\/em>, que se ajusta para que envuelva correctamente la figura del enemigo. Este componente es fundamental para que el personaje pueda navegar autom\u00e1ticamente dentro del mapa usando el NavMesh horneado. Se definen valores como velocidad, radio, altura y comportamiento de frenado, de manera que el desplazamiento sea natural y acorde con el dise\u00f1o del enemigo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"574\" height=\"508\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-821.png\" alt=\"\" class=\"wp-image-74349\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-821.png 574w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-821-300x266.png 300w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-822-1024x576.png\" alt=\"\" class=\"wp-image-74350\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-822-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-822-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-822-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-822-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-822.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Luego, se crea un nuevo script y se introduce el c\u00f3digo AI mostrado. El script controla todo el comportamiento del enemigo: detecci\u00f3n del jugador por rango, persecuci\u00f3n, ataques cuerpo a cuerpo, ataques especiales, animaciones y distancia de acci\u00f3n.<\/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 Rango2 : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public NavMeshAgent Monstruo;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float Velocidad;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public bool Persiguiendo;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float Rango;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float Distancia;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public Transform Objetivo;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[Header(&#8220;Animaciones&#8221;)]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public Animation Anim;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public string NombreAnimacionCaminar;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public string NombreAnimacionQuieto;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public string NombreAnimacionAtaque;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public string NombreAnimacionGrito;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[Header(&#8220;Ataque&#8221;)]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float da\u00f1o;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float RangoAtaque = 2f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float TiempoEntreAtaques = 2f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private float tiempoUltimoAtaque;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private bool estaAtacando = false;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private void Update()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Distancia = Vector3.Distance(Monstruo.transform.position, Objetivo.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Distancia &lt; Rango)<\/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;&nbsp;Persiguiendo = true;<\/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;else if (Distancia &gt; Rango + 3)<\/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;&nbsp;Persiguiendo = false;<\/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;if (Distancia &lt;= RangoAtaque &amp;&amp; Persiguiendo)<\/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;&nbsp;Monstruo.speed = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Time.time &gt;= tiempoUltimoAtaque + TiempoEntreAtaques &amp;&amp; !estaAtacando)<\/p>\n\n\n\n<p>&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;IniciarAtaque();<\/p>\n\n\n\n<p>&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;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (Persiguiendo == false)<\/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;&nbsp;Monstruo.speed = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estaAtacando = false;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Anim.CrossFade(NombreAnimacionQuieto);<\/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;else if (Persiguiendo == true &amp;&amp; !estaAtacando)<\/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;&nbsp;Monstruo.speed = Velocidad;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Anim.CrossFade(NombreAnimacionCaminar);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Monstruo.SetDestination(Objetivo.position);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private void OnDrawGizmosSelected()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gizmos.color = Color.green;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gizmos.DrawWireSphere(Monstruo.transform.position, Rango);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gizmos.color = Color.red;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gizmos.DrawWireSphere(Monstruo.transform.position, RangoAtaque);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private void IniciarAtaque()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estaAtacando = true;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tiempoUltimoAtaque = Time.time;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Solo reproduce la animaci\u00f3n, NO llama a Ataque() aqu\u00ed<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Anim.CrossFade(NombreAnimacionAtaque);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ El da\u00f1o se aplicar\u00e1 desde el Animation Event<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Termina el ataque despu\u00e9s de la duraci\u00f3n de la animaci\u00f3n<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoke(&#8220;FinalizarAtaque&#8221;, 1.5f); \/\/ Ajusta seg\u00fan duraci\u00f3n de tu animaci\u00f3n<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private void FinalizarAtaque()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estaAtacando = false;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Este m\u00e9todo ser\u00e1 llamado SOLO desde el Animation Event<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public void Ataque()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Verifica que el objetivo siga en rango antes de aplicar da\u00f1o<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Distancia &lt;= RangoAtaque &amp;&amp; Objetivo.GetComponent&lt;Codigo_Salud&gt;() != null)<\/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;&nbsp;Objetivo.GetComponent&lt;Codigo_Salud&gt;().RecibirDa\u00f1o(da\u00f1o);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Log(&#8220;Da\u00f1o aplicado: &#8221; + da\u00f1o);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"461\" height=\"502\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-823.png\" alt=\"\" class=\"wp-image-74351\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-823.png 461w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-823-275x300.png 275w\" sizes=\"auto, (max-width: 461px) 100vw, 461px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s arrastramos el script al personaje y ubicamos cada cosa en su lugar, en monstruo ponemos el mesh que creamos, en animaciones, escribimos el nombre de cada animaci\u00f3n que se nos pide de la misma manera que la animaciones que asignamos arriba, y en objetivo a\u00f1adimos el jugador y en Anim seleccionamos nuestro enemigo, para la creaci\u00f3n del da\u00f1o se explicar\u00e1 m\u00e1s abajo. En rango ponemos la zona en la que queremos que nuestro enemigo detecte al jugador, y en distancia no se pondr\u00e1 nada por que al correr el juego se ajusta solo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"453\" height=\"524\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-824.png\" alt=\"\" class=\"wp-image-74352\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-824.png 453w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-824-259x300.png 259w\" sizes=\"auto, (max-width: 453px) 100vw, 453px\" \/><\/figure>\n\n\n\n<p>Por otro lado, en el mapa se crea tambi\u00e9n un componente llamado <em>NavMesh Surface<\/em>, que se configura para detectar las \u00e1reas caminables y luego se presiona <em>Bake<\/em>. Esto genera una superficie azul que representa el terreno navegable, sta superficie define los l\u00edmites por donde la IA podr\u00e1 caminar o no.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Da\u00f1o al jugador:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-827-1024x300.png\" alt=\"\" class=\"wp-image-74355\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-827-1024x300.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-827-300x88.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-827-768x225.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-827.png 1374w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>luego, para aplicar da\u00f1o mediante animaciones, se accede a la ventana Window \u2192 Animation \u2192 Animation. All\u00ed se selecciona la animaci\u00f3n de golpe del enemigo y se busca el fotograma exacto en el que su ataque deber\u00eda impactar al jugador. En ese punto se presiona el bot\u00f3n \u201cAdd Event\u201d, creando un evento especial que ejecutar\u00e1 c\u00f3digo justo al ocurrir el golpe.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"289\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-828-1024x289.png\" alt=\"\" class=\"wp-image-74356\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-828-1024x289.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-828-300x85.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-828-768x217.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-828.png 1351w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"286\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-829-1024x286.png\" alt=\"\" class=\"wp-image-74357\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-829-1024x286.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-829-300x84.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-829-768x215.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-829.png 1352w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s de esto creamos un nuevo script.<br>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>\/\/ Script de Unity | 0 referencias<\/p>\n\n\n\n<p>public class Alienrango : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public MonstruoRango Enemigo;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ 0 referencias<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public void Da\u00f1o()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enemigo.Ataque();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Listo ya teniendo el Script para llamar al m\u00e9todo da\u00f1o cuando el enemigo ataca se debe asignar el script al enemigo y despu\u00e9s lo que hacemos es irnos al time event que creamos previamente y seleccionamos el m\u00e9todo que creamos el de da\u00f1o y con eso el enemigo solo ataca cuando haga la animaci\u00f3n de golpe.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"586\" height=\"1024\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1673-586x1024.png\" alt=\"\" class=\"wp-image-75851\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1673-586x1024.png 586w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1673-172x300.png 172w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1673.png 604w\" sizes=\"auto, (max-width: 586px) 100vw, 586px\" \/><\/figure>\n\n\n\n<p><strong>Da\u00f1o a distancia:<\/strong><\/p>\n\n\n\n<p>En este caso, para implementar da\u00f1o a distancia, se actualiza el script principal a\u00f1adiendo un sistema adicional de da\u00f1o progresivo. Este tipo de da\u00f1o es ideal para ataques especiales, como un grito s\u00f3nico. El c\u00f3digo agregado permite que el da\u00f1o no se aplique de golpe, sino gradualmente, aumentando y disminuyendo siguiendo una curva suave tipo monta\u00f1a. para ello se agrega lo siguiente:<br>\/\/ ==================== AGREGAR ESTAS VARIABLES ====================<\/p>\n\n\n\n<p>[Header(&#8220;Da\u00f1o Progresivo del Grito&#8221;)]<\/p>\n\n\n\n<p>public bool usarDa\u00f1oProgresivo = true; \/\/ Activa\/desactiva el sistema<\/p>\n\n\n\n<p>public float da\u00f1oInicioFin = 5f; \/\/ Da\u00f1o al inicio y final del grito<\/p>\n\n\n\n<p>public float ticksDa\u00f1oPorSegundo = 5f; \/\/ Cu\u00e1ntas veces por segundo aplica da\u00f1o<\/p>\n\n\n\n<p>private float da\u00f1oActualGrito = 0f;<\/p>\n\n\n\n<p>\/\/ ==================== MODIFICAR IniciarGrito() ====================<\/p>\n\n\n\n<p>private void IniciarGrito()<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;estaGritando = true;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;tiempoUltimoGrito = Time.time;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Monstruo.speed = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Anim.CrossFade(NombreAnimacionGrito);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Debug.Log(&#8220;\u00a1El enemigo est\u00e1 gritando!&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ AGREGAR ESTO: Si usa da\u00f1o progresivo, inicia la corrutina<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;if (usarDa\u00f1oProgresivo)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartCoroutine(Da\u00f1oProgresivoGrito(2f)); \/\/ 2f = duraci\u00f3n total del grito<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Invoke(&#8220;FinalizarGrito&#8221;, 2f);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/ ==================== AGREGAR ESTE M\u00c9TODO COMPLETO ====================<\/p>\n\n\n\n<p>\/\/ Sistema de da\u00f1o progresivo (efecto monta\u00f1a)<\/p>\n\n\n\n<p>private System.Collections.IEnumerator Da\u00f1oProgresivoGrito(float duracionTotal)<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;float tiempoTranscurrido = 0f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;float intervalo = 1f \/ ticksDa\u00f1oPorSegundo;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;while (tiempoTranscurrido &lt; duracionTotal)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float progreso = tiempoTranscurrido \/ duracionTotal;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float multiplicador = Mathf.Sin(progreso * Mathf.PI);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da\u00f1oActualGrito = Mathf.Lerp(da\u00f1oInicioFin, da\u00f1oGrito, multiplicador);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Distancia &lt;= RangoGrito &amp;&amp; Objetivo.GetComponent&lt;Codigo_Salud&gt;() != null)<\/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;&nbsp;Objetivo.GetComponent&lt;Codigo_Salud&gt;().RecibirDa\u00f1o(da\u00f1oActualGrito);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Log($&#8221;Da\u00f1o progresivo aplicado: {da\u00f1oActualGrito:F1} (Progreso: {progreso * 100:F0}%)&#8221;);<\/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;yield return new WaitForSeconds(intervalo);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tiempoTranscurrido += intervalo;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/ ==================== MODIFICAR AtaqueGrito() ====================<\/p>\n\n\n\n<p>public void AtaqueGrito()<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Si NO usas da\u00f1o progresivo, aplica da\u00f1o de golpe<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;if (!usarDa\u00f1oProgresivo)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Distancia &lt;= RangoGrito &amp;&amp; Objetivo.GetComponent&lt;Codigo_Salud&gt;() != null)<\/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;&nbsp;Objetivo.GetComponent&lt;Codigo_Salud&gt;().RecibirDa\u00f1o(da\u00f1oGrito);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Log(&#8220;Da\u00f1o de grito aplicado: &#8221; + da\u00f1oGrito);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>&#8212;<\/p>\n\n\n\n<p>## C\u00f3mo funciona el da\u00f1o progresivo:<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>Tiempo:&nbsp; 0s &#8212;&#8212;&#8211; 0.5s &#8212;&#8212;&#8211; 1.0s &#8212;&#8212;&#8211; 1.5s &#8212;&#8212;&#8211; 2.0s<\/p>\n\n\n\n<p>Da\u00f1o:&nbsp; &nbsp; 5 &#8212;&#8212;&#8211; 10 &#8212;&#8212;&#8212; 15 &#8212;&#8212;&#8212; 10 &#8212;&#8212;&#8212; 5<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u2191 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \u2191&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \u2191&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \u2191&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \u2191<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inicio &nbsp; &nbsp; Subiendo &nbsp; &nbsp; Pico &nbsp; &nbsp; &nbsp; Bajando&nbsp; &nbsp; &nbsp; &nbsp; Fin<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>### Ejemplo visual:<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15 (da\u00f1o m\u00e1ximo)&nbsp; &nbsp; \u2571\\<\/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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u2571&nbsp; \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \u2571&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;&nbsp;&nbsp;\u2571&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2571&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \\\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inicio &nbsp; \u2192 &nbsp; Pico &nbsp; \u2192 &nbsp; Fin<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>&#8212;<\/p>\n\n\n\n<p>## Configuraci\u00f3n en Unity:<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>[Da\u00f1o Progresivo del Grito]<\/p>\n\n\n\n<p>\u2713 usarDa\u00f1oProgresivo: true (activado)<\/p>\n\n\n\n<p>da\u00f1oInicioFin: 5 (da\u00f1o al principio y final)<\/p>\n\n\n\n<p>da\u00f1oGrito: 15 (da\u00f1o m\u00e1ximo en el pico)<\/p>\n\n\n\n<p>ticksDa\u00f1oPorSegundo: 5 (aplica da\u00f1o 5 veces por segundo)<\/p>\n\n\n\n<p>En resumen, este codigo permite crear da\u00f1o progresivo dentro del mismo c\u00f3digo pero necesitas hacer cambios en la animaci\u00f3n creando un time event en la animaci\u00f3n del grito<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-830-1024x576.png\" alt=\"\" class=\"wp-image-74358\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-830-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-830-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-830-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-830-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-830.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s de a\u00f1adir el time event y modificar el c\u00f3digo ya lo podemos seleccionar dentro de nuestros m\u00e9todos para dejarlo listo. Tambi\u00e9n es necesario crear un evento dentro de la animaci\u00f3n del grito, igual que con el ataque cuerpo a cuerpo, para sincronizar la animaci\u00f3n con la aplicaci\u00f3n del da\u00f1o. Esto garantiza que el ataque sea visual y mec\u00e1nicamente consistente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Barra de vida:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"882\" height=\"803\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-831.png\" alt=\"\" class=\"wp-image-74359\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-831.png 882w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-831-300x273.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-831-768x699.png 768w\" sizes=\"auto, (max-width: 882px) 100vw, 882px\" \/><\/figure>\n\n\n\n<p>Primero se crea un Canvas siguiendo la ruta indicada y dentro de \u00e9l se coloca una imagen que ser\u00e1 la barra de vida. Para una mejor organizaci\u00f3n, se crea un objeto vac\u00edo como padre de la imagen, y cada elemento se nombra de manera clara para evitar confusiones en el futuro<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"891\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-832-1024x891.png\" alt=\"\" class=\"wp-image-74360\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-832-1024x891.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-832-300x261.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-832-768x668.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-832.png 1117w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"266\" height=\"216\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-833.png\" alt=\"\" class=\"wp-image-74361\"\/><\/figure>\n\n\n\n<p>La imagen se posiciona dentro de la pantalla en la ubicaci\u00f3n deseada y luego se asigna una imagen de fondo que servir\u00e1 como interfaz visual de la salud del jugador.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"404\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-834-1024x404.png\" alt=\"\" class=\"wp-image-74362\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-834-1024x404.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-834-300x119.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-834-768x303.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-834-1536x607.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-834.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>En las propiedades de la imagen modificamos el cuadro de imagen que estaba en el centro al lugar que preferimos y en suerce image seleccionamos la imagen que queramos para que sea nuestra barra de vida pero no se puede quedar vacio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"465\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-835.png\" alt=\"\" class=\"wp-image-74363\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-835.png 578w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-835-300x241.png 300w\" sizes=\"auto, (max-width: 578px) 100vw, 578px\" \/><\/figure>\n\n\n\n<p>En raycast padding podemos ajustar como queremos la barra de vida importante que imagetype este filled y ya en fill method podemos escoger como se disminuir\u00e1 la barra de vida.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-836-1024x576.png\" alt=\"\" class=\"wp-image-74364\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-836-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-836-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-836-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-836-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-836.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>La forma en la que se realiza el efecto que muestro en la imagen duplicamos la barra la renombramos y la ponemos encima de la imagen de la barra original despu\u00e9s le ponemos el color del fondo y listo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-837-1024x550.png\" alt=\"\" class=\"wp-image-74365\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-837-1024x550.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-837-300x161.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-837-768x413.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-837-1536x826.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-837.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Para crear el texto de la barra nos vamos a la creaci\u00f3n de objeto como se muestra en pantalla.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-838-1024x461.png\" alt=\"\" class=\"wp-image-74366\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-838-1024x461.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-838-300x135.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-838-768x346.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-838-1536x692.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-838.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ajustamos el texto debajo de la barra de vida para que no quede por debajo de esta en la pantalla y despu\u00e9s la ajustamos en el centro de esta. Seguido de esto, se desarrolla un script que maneja el sistema de salud, actualizando el valor num\u00e9rico y visual de la barra.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"686\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-839-1024x686.png\" alt=\"\" class=\"wp-image-74367\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-839-1024x686.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-839-300x201.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-839-768x515.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-839-1536x1029.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-839.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\/\/ Importa el espacio de nombres para trabajar con colecciones no gen\u00e9ricas<\/p>\n\n\n\n<p>using System.Collections;<\/p>\n\n\n\n<p>\/\/ Importa el espacio de nombres para trabajar con colecciones gen\u00e9ricas (como List, Dictionary)<\/p>\n\n\n\n<p>using System.Collections.Generic;<\/p>\n\n\n\n<p>\/\/ Importa el espacio de nombres principal de Unity para acceder a componentes y funcionalidades del motor<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>\/\/ Importa el espacio de nombres de Unity para trabajar con elementos de interfaz de usuario (UI)<\/p>\n\n\n\n<p>using UnityEngine.UI;<\/p>\n\n\n\n<p>\/\/ Define una clase p\u00fablica llamada Codigo_Salud que hereda de MonoBehaviour (clase base de Unity para scripts)<\/p>\n\n\n\n<p>public class Codigo_Salud : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Variable p\u00fablica que almacena la salud actual del jugador, inicializada en 100<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float Salud = 100;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Variable p\u00fablica que almacena la salud m\u00e1xima posible del jugador, inicializada en 100<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float SaludMaxima = 100;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Atributo que crea un encabezado &#8220;Interfaz&#8221; en el Inspector de Unity para organizar variables<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[Header(&#8220;Interfaz&#8221;)]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Variable p\u00fablica de tipo Image para referenciar la barra de salud visual en la UI<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public Image BarraSalud;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Variable p\u00fablica de tipo Text para referenciar el texto que muestra la salud num\u00e9rica<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public Text TextoSalud;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ M\u00e9todo Update se ejecuta autom\u00e1ticamente cada frame (normalmente 60 veces por segundo)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;void Update()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Llama al m\u00e9todo ActualizarInterfaz en cada frame para mantener la UI actualizada<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActualizarInterfaz();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ M\u00e9todo personalizado que actualiza los elementos visuales de la interfaz<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;void ActualizarInterfaz()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Calcula el porcentaje de salud (entre 0 y 1) y lo asigna al fillAmount de la barra<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Si Salud=50 y SaludMaxima=100, fillAmount ser\u00e1 0.5 (50% de la barra llena)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BarraSalud.fillAmount = Salud \/ SaludMaxima;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Actualiza el texto mostrando &#8220;Salud: &#8221; seguido del valor de Salud formateado sin decimales<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ ToString(&#8220;f0&#8221;) formatea el n\u00famero float a string sin decimales (ejemplo: 75.8 se muestra como &#8220;76&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextoSalud.text = &#8220;Salud: &#8221; + Salud.ToString(&#8220;f0&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"575\" height=\"296\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-840.png\" alt=\"\" class=\"wp-image-74368\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-840.png 575w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-840-300x154.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"443\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-841-1024x443.png\" alt=\"\" class=\"wp-image-74369\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-841-1024x443.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-841-300x130.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-841-768x332.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-841.png 1382w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Como siguiente paso, le a\u00f1adiremos un sistema de part\u00edculas para cuando golpean al jugador, pueden crear un sistema de part\u00edculas desde:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"947\" height=\"767\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-842.png\" alt=\"\" class=\"wp-image-74370\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-842.png 947w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-842-300x243.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-842-768x622.png 768w\" sizes=\"auto, (max-width: 947px) 100vw, 947px\" \/><\/figure>\n\n\n\n<p>ah\u00ed ya ajustan la duraci\u00f3n, el tama\u00f1o el tipo de part\u00edculas y todo lo necesario para crear un mejor efecto visual:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"570\" height=\"544\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-843.png\" alt=\"\" class=\"wp-image-74371\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-843.png 570w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-843-300x286.png 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-844-1024x442.png\" alt=\"\" class=\"wp-image-74372\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-844-1024x442.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-844-300x130.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-844-768x332.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-844-1536x663.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-844.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s de hacer el sistema de part\u00edculas&nbsp; y tener ya nuestro fuego, vamos a hacer que el jugador reciba da\u00f1o, esto es m\u00e1s como prueba para poder como funciona la barra de vida.<br>Como primero agregamos un colider marcado como <em>Trigger<\/em>, para que el jugador pueda interactuar sin colisionar f\u00edsicamente. Se crea un script que, al detectar que el objeto con tag \u201cPlayer\u201d ingres\u00f3 al trigger, le aplica da\u00f1o mediante el m\u00e9todo <em>RecibirDa\u00f1o<\/em> agregado previamente dentro del script de salud.El script es el siguiente:<br>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>\/\/ Script que se coloca en objetos que causan da\u00f1o (enemigos, trampas, fuego, proyectiles, etc.)<\/p>\n\n\n\n<p>public class PersonaJe : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Variable p\u00fablica que define cu\u00e1nto da\u00f1o causa este objeto<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Se puede ajustar desde el Inspector de Unity<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float CantidadDa\u00f1o;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ M\u00e9todo que se ejecuta autom\u00e1ticamente cuando otro objeto CON COLLIDER entra en el trigger de este objeto<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ IMPORTANTE: Este objeto debe tener un Collider con &#8220;Is Trigger&#8221; activado<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private void OnTriggerEnter(Collider other)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Verifica dos condiciones:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ 1. El objeto que entr\u00f3 tiene el tag &#8220;Player&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ 2. El objeto que entr\u00f3 tiene el componente\/script Codigo_Salud adjunto<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(other.CompareTag(&#8220;Player&#8221;) &amp;&amp; other.GetComponent&lt;Codigo_Salud&gt;())<\/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;&nbsp;\/\/ Si ambas condiciones son verdaderas:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Obtiene el componente Codigo_Salud del jugador y llama a su m\u00e9todo RecibirDa\u00f1o<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Le pasa como par\u00e1metro la cantidad de da\u00f1o configurada en CantidadDa\u00f1o<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;other.GetComponent&lt;Codigo_Salud&gt;().RecibirDa\u00f1o(CantidadDa\u00f1o);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<br>Tambi\u00e9n debemos agregar una nueva linea de codigo en nuestro script de salud de la siguiente forma:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"516\" height=\"387\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-845.png\" alt=\"\" class=\"wp-image-74373\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-845.png 516w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-845-300x225.png 300w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/figure>\n\n\n\n<p>la l\u00ednea es la siguiente:<br>public void RecibirDa\u00f1o(float da\u00f1o)<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Salud -= da\u00f1o;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"264\" height=\"120\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-846.png\" alt=\"\" class=\"wp-image-74374\"\/><\/figure>\n\n\n\n<p>Despu\u00e9s, se crea un nuevo Canvas que funcionar\u00e1 como pantalla de muerte. Esta pantalla se ajusta para cubrir completamente la vista y se agrega un texto o mensaje indicando que el jugador ha muerto.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-847-1024x634.png\" alt=\"\" class=\"wp-image-74375\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-847-1024x634.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-847-300x186.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-847-768x476.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-847-1536x951.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-847.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>La ajustamos para que cubra toda la pantalla.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"253\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-848-1024x253.png\" alt=\"\" class=\"wp-image-74376\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-848-1024x253.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-848-300x74.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-848-768x190.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-848-1536x379.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-848.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ponemos un texto y una c\u00e1mara para que no nos moleste m\u00e1s adelante.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"249\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-849-1024x249.png\" alt=\"\" class=\"wp-image-74377\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-849-1024x249.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-849-300x73.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-849-768x187.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-849.png 1105w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>arrastramos despues el canvas a los assets, y actualizamos el c\u00f3digo de salud a lo siguiente:<br>[Header(&#8220;Muerte&#8221;)]<\/p>\n\n\n\n<p>public GameObject Muerto;<br><br>if(Salud &lt;= 0)<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Instantiate(Muerto);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Destroy(gameObject);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>y lo a\u00f1adimos en la siguiente parte.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"619\" height=\"877\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-850.png\" alt=\"\" class=\"wp-image-74379\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-850.png 619w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-850-212x300.png 212w\" sizes=\"auto, (max-width: 619px) 100vw, 619px\" \/><\/figure>\n\n\n\n<p>Esto nos soltara el canvas de estas muerto cuando la vida baje a 0.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"463\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-851-1024x463.png\" alt=\"\" class=\"wp-image-74380\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-851-1024x463.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-851-300x136.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-851-768x347.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-851.png 1347w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Vamos a agregar este efecto de da\u00f1o cuando sabes que te queda poca salud, se implementa un efecto de mancha de sangre en la pantalla cuando el jugador recibe da\u00f1o. Se crea una imagen roja semitransparente y se a\u00f1ade un <em>Canvas Group <\/em>que permite controlar la opacidad de esa imagen. Luego se actualiza el c\u00f3digo para que cuando el jugador reciba da\u00f1o, la huella aparezca con opacidad total y luego se desvanezca gradualmente usando Time.deltaTime.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"314\" height=\"110\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-852.png\" alt=\"\" class=\"wp-image-74381\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-852.png 314w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-852-300x105.png 300w\" sizes=\"auto, (max-width: 314px) 100vw, 314px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"605\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-853.png\" alt=\"\" class=\"wp-image-74382\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-853.png 584w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-853-290x300.png 290w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"596\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-854.png\" alt=\"\" class=\"wp-image-74383\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-854.png 654w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-854-300x273.png 300w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/figure>\n\n\n\n<p>public CanvasGroup huelladesangre;<\/p>\n\n\n\n<p><br>Salud -= da\u00f1o;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;huelladesangre.alpha = 1;<\/p>\n\n\n\n<p><br>if(huelladesangre.alpha &gt; 0)<\/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;&nbsp;huelladesangre.alpha -= Time.deltaTime;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>ya con estas l\u00edneas de c\u00f3digo cuando el jugador recibe da\u00f1o se ver\u00e1 la huella en la pantalla que va desapareciendo con el tiempo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>A\u00f1adir un timer:<\/strong><\/h3>\n\n\n\n<p>Para implementar un timer dentro del videojuego, se a\u00f1ade un Canvas y un texto dentro de la escena para crear un contador de tiempo. Este contador puede funcionar como cron\u00f3metro ascendente o como un temporizador regresivo, seg\u00fan el valor inicial del tiempo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"296\" height=\"233\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-855.png\" alt=\"\" class=\"wp-image-74384\"\/><\/figure>\n\n\n\n<p>A\u00f1adimos un canvas y un texto.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"490\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-856-1024x490.png\" alt=\"\" class=\"wp-image-74385\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-856-1024x490.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-856-300x143.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-856-768x367.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-856.png 1058w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"817\" height=\"807\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-857.png\" alt=\"\" class=\"wp-image-74386\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-857.png 817w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-857-300x296.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-857-768x759.png 768w\" sizes=\"auto, (max-width: 817px) 100vw, 817px\" \/><\/figure>\n\n\n\n<p>Y se crea tambi\u00e9n un objeto vac\u00edo y un script y se a\u00f1ade el siguiente codigo:<br>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.UI;<\/p>\n\n\n\n<p>public class Timer : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float timer = 0f; &nbsp; &nbsp; &nbsp; \/\/ Si es 0 = cron\u00f3metro, si es &gt;0 = cuenta regresiva<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public Text textoTimer;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private bool isCountdown;&nbsp; &nbsp; &nbsp; \/\/ Para detectar si debe contar regresivo o progresivo<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Si el valor inicial es mayor a cero \u2192 cuenta regresiva<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isCountdown = timer &gt; 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;void Update()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (isCountdown)<\/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;&nbsp;\/\/ Cuenta regresiva<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer -= Time.deltaTime;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Evita que llegue a negativo<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (timer &lt; 0)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer = 0;<\/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;else<\/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;&nbsp;\/\/ Cron\u00f3metro (cuenta hacia arriba)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer += Time.deltaTime;<\/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;\/\/ Convertir a minutos y segundos<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int minutos = Mathf.FloorToInt(timer \/ 60);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int segundos = Mathf.FloorToInt(timer % 60);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Mostrar en formato MM:SS<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textoTimer.text = minutos.ToString(&#8220;00&#8221;) + &#8220;:&#8221; + segundos.ToString(&#8220;00&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"462\" height=\"976\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-858.png\" alt=\"\" class=\"wp-image-74387\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-858.png 462w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-858-142x300.png 142w\" sizes=\"auto, (max-width: 462px) 100vw, 462px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s de guardar en el objeto vac\u00edo ponemos nuestro c\u00f3digo y ponemos el objeto text donde se nos pide en inspector importante que est\u00e9 vac\u00edo y ajustar el tiempo para lo que necesitemos y listo, tenemos nuestro contador de tiempo puesto.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"446\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-859-1024x446.png\" alt=\"\" class=\"wp-image-74388\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-859-1024x446.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-859-300x131.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-859-768x335.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-859-1536x669.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-859.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>as\u00ed es como se ver\u00eda en el juego.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Objetos Recogibles:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"395\" height=\"260\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-861.png\" alt=\"\" class=\"wp-image-74390\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-861.png 395w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-861-300x197.png 300w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/figure>\n\n\n\n<p>Se sube un objeto al proyecto, en este caso una gema generada desde <strong><em>Blender<\/em><\/strong> y se le a\u00f1ade un collider tipo caja que se marca con <em>Is Trigger<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"479\" height=\"343\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-863.png\" alt=\"\" class=\"wp-image-74392\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-863.png 479w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-863-300x215.png 300w\" sizes=\"auto, (max-width: 479px) 100vw, 479px\" \/><\/figure>\n\n\n\n<p>Nos vamos a tag, y se crea un nuevo tag para identificar ese objeto como recogible. Se desarrolla un script que detecta cuando el jugador lo toca, recupera un porcentaje de vida, suma al contador de diamantes y destruye el objeto recogido.<br><br>using UnityEngine;<\/p>\n\n\n\n<p>public class Diamante : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float vidaARecuperar = 20f;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;private void OnTriggerEnter(Collider other)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (other.CompareTag(&#8220;Player&#8221;))<\/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;&nbsp;\/\/ Recuperar vida<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var salud = other.GetComponent&lt;Codigo_Salud&gt;();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (salud != null)<\/p>\n\n\n\n<p>&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;salud.Salud += vidaARecuperar;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (salud.Salud &gt; salud.SaludMaxima)<\/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;&nbsp;salud.Salud = salud.SaludMaxima;<\/p>\n\n\n\n<p>&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;\/\/ SUMAR al contador de diamantes<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContadorDiamantes.instancia.AgregarDiamante(1);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Destruir diamante<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destroy(gameObject);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Con este script tambi\u00e9n hacemos que recupere vida el personaje.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"239\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-865-1024x239.png\" alt=\"\" class=\"wp-image-74394\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-865-1024x239.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-865-300x70.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-865-768x180.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-865-1536x359.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-865.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Creamos un prefabricado arrastrando el objeto a la carpeta de assets y borramos el objetos de la jerarqu\u00eda.<br>Despu\u00e9s a\u00f1adimos un nuevo script.<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>public class DiamondSpawner : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[Header(&#8220;Configuraci\u00f3n&#8221;)]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public GameObject diamantePrefab; &nbsp; &nbsp; &nbsp; \/\/ Prefab del diamante<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public int cantidadDiamantes = 20;&nbsp; &nbsp; &nbsp; \/\/ Cu\u00e1ntos spawnnear<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float rangoSpawn = 50f;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Radio de spawn<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public float alturaSpawn = 1f;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Altura del diamante<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[Header(&#8220;Spawn en NavMesh&#8221;)]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public bool usarNavMesh = true;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;void Start()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpawnearDiamantes();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;void SpawnearDiamantes()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int diamantesSpawneados = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int intentos = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int maxIntentos = cantidadDiamantes * 10;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (diamantesSpawneados &lt; cantidadDiamantes &amp;&amp; intentos &lt; maxIntentos)<\/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;&nbsp;intentos++;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Generar posici\u00f3n aleatoria en el rango<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector3 posicionAleatoria = transform.position + Random.insideUnitSphere * rangoSpawn;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;posicionAleatoria.y = alturaSpawn;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Verificar NavMesh<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (usarNavMesh)<\/p>\n\n\n\n<p>&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;UnityEngine.AI.NavMeshHit hit;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (UnityEngine.AI.NavMesh.SamplePosition(posicionAleatoria, out hit, rangoSpawn, UnityEngine.AI.NavMesh.AllAreas))<\/p>\n\n\n\n<p>&nbsp;&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;&nbsp;posicionAleatoria = hit.position;<\/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;&nbsp;posicionAleatoria.y = alturaSpawn;<\/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;&nbsp;\/\/ Instanciar diamante<\/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;&nbsp;Instantiate(diamantePrefab, posicionAleatoria, Quaternion.identity);<\/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;&nbsp;diamantesSpawneados++;<\/p>\n\n\n\n<p>&nbsp;&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;}<\/p>\n\n\n\n<p>&nbsp;&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;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Instantiate(diamantePrefab, posicionAleatoria, Quaternion.identity);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diamantesSpawneados++;<\/p>\n\n\n\n<p>&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;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Log(&#8220;Diamantes spawneados: &#8221; + diamantesSpawneados);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Visualizar rango en el editor<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;void OnDrawGizmosSelected()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gizmos.color = Color.cyan;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gizmos.DrawWireSphere(transform.position, rangoSpawn);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>este nos permitir\u00e1 crear los cristales en el mapa de manera aleatoria<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"369\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-867-1024x369.png\" alt=\"\" class=\"wp-image-74396\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-867-1024x369.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-867-300x108.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-867-768x276.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-867-1536x553.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-867.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Se a\u00f1ade un nuevo objeto vac\u00edo y arrastramos el prefab, escogemos la cantidad de diamantes y la distancia que tendr\u00e1n del suelo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"237\" height=\"51\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-868.png\" alt=\"\" class=\"wp-image-74397\"\/><\/figure>\n\n\n\n<p>Se crea un objeto vac\u00edo con un canvas y un texto y despu\u00e9s creamos un script el cual nos servir\u00e1 como contador.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"459\" height=\"204\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-869.png\" alt=\"\" class=\"wp-image-74398\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-869.png 459w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-869-300x133.png 300w\" sizes=\"auto, (max-width: 459px) 100vw, 459px\" \/><\/figure>\n\n\n\n<p>a\u00f1adimos el texto al objeto vac\u00edo y como siempre ponemos el texto y despu\u00e9s definimos la cantidad de diamantes que hay y ya cada vez que recojamos un diamante el contador subir\u00e1 a 1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tutorial:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"231\" height=\"62\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-870.png\" alt=\"\" class=\"wp-image-74399\"\/><\/figure>\n\n\n\n<p>Empezamos creando un objeto vac\u00edo que tenga un Canvas y un texto. Seguido un script que agregue la funcionalidad de mostrar todo el tutorial en un texto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Men\u00fa principal:<\/strong><\/h3>\n\n\n\n<p>En la creaci\u00f3n del men\u00fa principal, lo primero es generar un nuevo Canvas, que ser\u00e1 el contenedor de toda la interfaz que ver\u00e1 el jugador antes de iniciar la partida. Se debe ajustar el Canvas en el modo Scale With Screen Size, ya que esto garantiza que todos los elementos del men\u00fa se ajusten autom\u00e1ticamente a cualquier resoluci\u00f3n o tama\u00f1o de pantalla.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"383\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1643-1024x383.png\" alt=\"\" class=\"wp-image-75796\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1643-1024x383.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1643-300x112.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1643-768x288.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1643-1536x575.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1643.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Una vez creado el Canvas el cual funcionar\u00e1 como la base visual del men\u00fa. Este panel suele cubrir toda la pantalla y puede tener un color s\u00f3lido, una textura o una imagen de fondo que sirva como est\u00e9tica principal del men\u00fa.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"360\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1644-1024x360.png\" alt=\"\" class=\"wp-image-75797\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1644-1024x360.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1644-300x106.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1644-768x270.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1644-1536x540.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1644.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Seguido de esto se agrega una imagen adicional si queremos reforzar el estilo visual, por ejemplo un logo, una ilustraci\u00f3n o un marco decorativo para la interfaz.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"474\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1645-1024x474.png\" alt=\"\" class=\"wp-image-75798\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1645-1024x474.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1645-300x139.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1645-768x356.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1645.png 1378w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Seguido a esto, se agrega un <strong>TextMeshPro<\/strong>, que ser\u00e1 el encargado de mostrar el t\u00edtulo del juego o los textos principales del men\u00fa. TextMeshPro es preferible frente al texto est\u00e1ndar debido a su mayor nitidez, calidad visual y personalizaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"416\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1646-1024x416.png\" alt=\"\" class=\"wp-image-75799\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1646-1024x416.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1646-300x122.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1646-768x312.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1646.png 1319w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Luego se a\u00f1ade un <strong>bot\u00f3n<\/strong> dentro del Canvas. Este bot\u00f3n puede ser creado desde la opci\u00f3n <em>UI \u2192 Button (TextMeshPro)<\/em> y se ajusta su tama\u00f1o, su posici\u00f3n y su estilo visual para que encaje correctamente dentro del dise\u00f1o general.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"254\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1649.png\" alt=\"\" class=\"wp-image-75802\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1649.png 384w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1649-300x198.png 300w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p>Una forma para mantener el proyecto organizado, creando un GameObject vac\u00edo dentro del Canvas, el cual funcionar\u00e1 como contenedor o grupo para todos los botones del men\u00fa, permitiendo administrar f\u00e1cilmente la interfaz, mover todos los botones juntos mantener una estructura limpia.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"453\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1650-1024x453.png\" alt=\"\" class=\"wp-image-75803\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1650-1024x453.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1650-300x133.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1650-768x340.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1650.png 1443w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Una vez que tenemos configurado el primer bot\u00f3n con su estilo visual y su tama\u00f1o, lo duplicamos cada bot\u00f3n duplicado se renombra seg\u00fan su funci\u00f3n y se posiciona dentro del contenedor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"365\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1653-1024x365.png\" alt=\"\" class=\"wp-image-75806\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1653-1024x365.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1653-300x107.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1653-768x274.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1653.png 1421w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ahora, ya con los botones ajustados, se crean los paneles que formar\u00e1n parte del men\u00fa de opciones, los cuales pueden incluir configuraciones como, ajustes de volumen, configuraci\u00f3n de sensibilidad, resoluci\u00f3n de pantalla, informaci\u00f3n del juego y controles. Para ello, agregamos nuevos paneles dentro del Canvas y los acomodamos para que funcionen como submen\u00fas. Cada panel se activa o desactiva dependiendo del bot\u00f3n presionado.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1656-1024x576.png\" alt=\"\" class=\"wp-image-75810\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1656-1024x576.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1656-300x169.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1656-768x432.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1656-1536x864.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1656.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>a\u00f1adimos el siguiente codigo:<br>using UnityEngine;<\/p>\n\n\n\n<p>using UnityEngine.SceneManagement;<\/p>\n\n\n\n<p>public class MainMenu : MonoBehaviour<\/p>\n\n\n\n<p>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public GameObject optionsMenu;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public GameObject mainMenu;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public void OpenOptionsPanel()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mainMenu.SetActive(false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optionsMenu.SetActive(true);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public void OpenMainMenuPanel()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mainMenu.SetActive(true);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optionsMenu.SetActive(false);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public void QuitGame()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Quit();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public void PlayGame()<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SceneManager.LoadScene(&#8220;PlayerS&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}Este script es el encargado de controlar el comportamiento del men\u00fa principal. Gracias a \u00e9l podemos cambiar entre el panel principal y el panel de opciones, iniciar el juego y cerrar la aplicaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"301\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1658-1024x301.png\" alt=\"\" class=\"wp-image-75812\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1658-1024x301.png 1024w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1658-300x88.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1658-768x226.png 768w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1658-1536x452.png 1536w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1658.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s de escribir el c\u00f3digo, se arrastra el script hacia el Canvas para que Unity reconozca las funciones y permita vincularlas desde el Inspector.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"458\" height=\"481\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1659.png\" alt=\"\" class=\"wp-image-75813\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1659.png 458w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/image-1659-286x300.png 286w\" sizes=\"auto, (max-width: 458px) 100vw, 458px\" \/><\/figure>\n\n\n\n<p>Seleccionamos cada bot\u00f3n del men\u00fa y desde su componente Button \u2192 OnClick(), elegimos la funci\u00f3n del script que debe ejecutarse.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Video explicaci\u00f3n<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Video presentacion del juego\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/eQPbhcSGi3M?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<h2 class=\"wp-block-heading\"><strong>CREDITOS<\/strong>:<\/h2>\n\n\n\n<p>Autores:&nbsp;<a href=\"https:\/\/niixer.com\/?s=Nicolas+Araujo+Rodriguez\">Nicol\u00e1s Ara\u00fajo Rodr\u00edguez<\/a>, <a href=\"https:\/\/niixer.com\/?s=Nicolas+Araujo+Rodriguez\">Nicol\u00e1s Cruz Capella<\/a><\/p>\n\n\n\n<p>Editor:&nbsp;<a href=\"https:\/\/niixer.com\/?s=Carlos+Iv%C3%A1n+Pinz%C3%B3n+Romero\">Carlos Iv\u00e1n Pinz\u00f3n Romero<\/a><\/p>\n\n\n\n<p>C\u00f3digo:&nbsp;<a href=\"https:\/\/niixer.com\/?s=UCCGG1-9\">UCMV<\/a><\/p>\n\n\n\n<p>Universidad:&nbsp;<a href=\"https:\/\/niixer.com\/?s=Universidad+Central\">Universidad Central<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>REFERENCIAS<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">LuisCanary [@LuisCanary]. (s\/f-a). Como hacer un TIMER en Unity \ud83d\udd52\ud83d\udcaf [[Object Object]]. Youtube. Recuperado el 26 de noviembre de 2025, de https:\/\/www.youtube.com\/watch?v=dgMImeoZG5w<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">LuisCanary [@LuisCanary]. (s\/f-b). Como Recoger ITEMS y Objetos en Unity (OnTriggerEnter) \ud83e\udd1a\ud83c\udf69\ud83c\udf70 [[Object Object]]. Youtube. Recuperado el 26 de noviembre de 2025, de https:\/\/www.youtube.com\/watch?v=-4GDzNz2t8M<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Myinstants. (s\/f-a). Mii Channel Music. myinstants. Recuperado el 26 de noviembre de 2025, de https:\/\/www.myinstants.com\/es\/instant\/mii-channel-music-82732\/?utm_source=copy&amp;utm_medium=share<br><br><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Myinstants. (s\/f-b). Myinstants - Sonidos divertidos populares de Colombia. myinstants. Recuperado el 26 de noviembre de 2025, de https:\/\/www.myinstants.com\/es\/index\/co\/<br><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Myinstants. (s\/f-c). Nemesis Resident Evil 3 ROAR. myinstants. Recuperado el 26 de noviembre de 2025, de https:\/\/www.myinstants.com\/es\/instant\/nemesis-resident-evil-3-roar\/?utm_source=copy&amp;utm_medium=share<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Myinstants. (s\/f-d). Welcome Mercador RE4. myinstants. Recuperado el 26 de noviembre de 2025, de https:\/\/www.myinstants.com\/es\/instant\/welcome-mercador-re4-20742\/?utm_source=copy&amp;utm_medium=share<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Ritch, D. [@devritch]. (s\/f-a). Como hacer que un enemigo te ataque en Unity (Enemigo que te hace da\u00f1o) || Tutorial Unity 2025 [[Object Object]]. Youtube. Recuperado el 26 de noviembre de 2025, de https:\/\/www.youtube.com\/watch?v=cPtxfGPNeEc<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Ritch, D. [@devritch]. (s\/f-b). Como hacer un enemigo que te persiga con RANGO en Unity || Enemigo te persigue || Tutorial 2025 [[Object Object]]. Youtube. Recuperado el 26 de noviembre de 2025, de https:\/\/www.youtube.com\/watch?v=-G3x0M2EynM<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Ritch, D. [@devritch]. (s\/f-c). Como hacer una barra de vida y que el jugador reciba da\u00f1o || Tutorial Unity 2025 [[Object Object]]. Youtube. Recuperado el 26 de noviembre de 2025, de https:\/\/www.youtube.com\/watch?v=jafu7eAjpuk<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Creaci\u00f3n del cielo y c\u00f3mo oscurecer el mapa: Para comenzar, se descarga un paquete de skybox desde la Asset Store (&#8220;AllSky Free \u2013 10 Sky \/ Skybox Set&#8221;). Para ello: A continuaci\u00f3n,para oscurecer la escena se modifica la configuraci\u00f3n de iluminaci\u00f3n desde Window\/Rendering\/Lighting Settings. All\u00ed se selecciona el skybox descargadoSeguir Leyendo<\/p>\n","protected":false},"author":1874,"featured_media":74473,"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":[30],"tags":[],"class_list":["post-74329","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-niixer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Desarrollo de videojuego de laberinto haciendo uso del motor unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos<\/title>\n<meta name=\"description\" content=\"En Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos encuentra los mejores contenidos del mundo de la tecnolog\u00eda | Desarrollo de videojuego de laberinto haciendo uso del motor unity\" \/>\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\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Desarrollo de videojuego de laberinto haciendo uso del motor unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos\" \/>\n<meta property=\"og:description\" content=\"En Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos encuentra los mejores contenidos del mundo de la tecnolog\u00eda | Desarrollo de videojuego de laberinto haciendo uso del motor unity\" \/>\n<meta property=\"og:url\" content=\"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-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-11-27T01:53:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-28T20:38:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/Videojuego.png\" \/>\n\t<meta property=\"og:image:width\" content=\"808\" \/>\n\t<meta property=\"og:image:height\" content=\"383\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"naraujor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"naraujor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"33 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Desarrollo de videojuego de laberinto haciendo uso del motor unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","description":"En Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos encuentra los mejores contenidos del mundo de la tecnolog\u00eda | Desarrollo de videojuego de laberinto haciendo uso del motor unity","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\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/","og_locale":"es_ES","og_type":"article","og_title":"Desarrollo de videojuego de laberinto haciendo uso del motor unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","og_description":"En Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos encuentra los mejores contenidos del mundo de la tecnolog\u00eda | Desarrollo de videojuego de laberinto haciendo uso del motor unity","og_url":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-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-11-27T01:53:27+00:00","article_modified_time":"2025-11-28T20:38:00+00:00","og_image":[{"width":808,"height":383,"url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/Videojuego.png","type":"image\/png"}],"author":"naraujor","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"naraujor","Tiempo de lectura":"33 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/#article","isPartOf":{"@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/"},"author":{"name":"naraujor","@id":"https:\/\/niixer.com\/#\/schema\/person\/cf1105385c1ab92a086977f7020a728d"},"headline":"Desarrollo de videojuego de laberinto haciendo uso del motor unity","datePublished":"2025-11-27T01:53:27+00:00","dateModified":"2025-11-28T20:38:00+00:00","mainEntityOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/"},"wordCount":6443,"publisher":{"@id":"https:\/\/niixer.com\/#organization"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/Videojuego.png","articleSection":["Niixer"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/","url":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/","name":"Desarrollo de videojuego de laberinto haciendo uso del motor 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\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/#primaryimage"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/Videojuego.png","datePublished":"2025-11-27T01:53:27+00:00","dateModified":"2025-11-28T20:38:00+00:00","description":"En Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos encuentra los mejores contenidos del mundo de la tecnolog\u00eda | Desarrollo de videojuego de laberinto haciendo uso del motor unity","breadcrumb":{"@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/#primaryimage","url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/Videojuego.png","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/Videojuego.png","width":808,"height":383,"caption":"Videojuego en unity"},{"@type":"BreadcrumbList","@id":"https:\/\/niixer.com\/index.php\/2025\/11\/26\/desarrollo-de-videojuego-de-laberinto-haciendo-uso-del-motor-unity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/niixer.com\/"},{"@type":"ListItem","position":2,"name":"Desarrollo de videojuego de laberinto haciendo uso del motor 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\/cf1105385c1ab92a086977f7020a728d","name":"naraujor","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/79eb8dc7dc7b0ab242e112121b8c5b710be040f9aa2cc2d5030c5a0343a4b533?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/79eb8dc7dc7b0ab242e112121b8c5b710be040f9aa2cc2d5030c5a0343a4b533?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/79eb8dc7dc7b0ab242e112121b8c5b710be040f9aa2cc2d5030c5a0343a4b533?s=96&d=mm&r=g","caption":"naraujor"},"url":"https:\/\/niixer.com\/index.php\/author\/naraujor\/"}]}},"jetpack_featured_media_url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/11\/Videojuego.png","_links":{"self":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/74329","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\/1874"}],"replies":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/comments?post=74329"}],"version-history":[{"count":7,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/74329\/revisions"}],"predecessor-version":[{"id":76570,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/74329\/revisions\/76570"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media\/74473"}],"wp:attachment":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media?parent=74329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/categories?post=74329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/tags?post=74329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}