{"id":4484,"date":"2020-12-03T19:33:39","date_gmt":"2020-12-04T00:33:39","guid":{"rendered":"https:\/\/niixer.com\/?p=4484"},"modified":"2020-12-03T19:33:42","modified_gmt":"2020-12-04T00:33:42","slug":"manual-de-creacion-juegode-laberinto-en-unity","status":"publish","type":"post","link":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/","title":{"rendered":"Manual de Creacion Juegode laberinto en Unity"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Creacion del entorno<\/h1>\n\n\n\n<p>Empezaremos creando un objeto 3d tipo Terrain<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png\" alt=\"\" class=\"wp-image-4487\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Utilizaremos la herramienta para la creacion de monta\u00f1as<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-73.png\" alt=\"\" class=\"wp-image-4488\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-73.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-73-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Importaremos los arboles del siguiente asset<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"239\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-74.png\" alt=\"\" class=\"wp-image-4489\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-74.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-74-300x159.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Rellenaremos el espacio de los arboles con la siguiente herramienta<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-75.png\" alt=\"\" class=\"wp-image-4490\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-75.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-75-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Aplicaremos al entorno distintos materiales para diversificar el suelo<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-76.png\" alt=\"\" class=\"wp-image-4491\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-76.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-76-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Crearemos las paredes externas las cuales ser\u00e1n cubos alargados y nos permitir\u00e1 tener es espacio para la cuadr\u00edcula que deseamos realizar<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-77.png\" alt=\"\" class=\"wp-image-4492\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-77.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-77-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Mediante la siguiente pagina web generamos un laberinto el cual consta de 10 unidades de distancia hacia cada lado para que se ajuste al per\u00edmetro que dise\u00f1amos<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-78.png\" alt=\"\" class=\"wp-image-4493\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-78.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-78-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Agregamos cada pared seg\u00fan el formato que hayamos generado<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-79.png\" alt=\"\" class=\"wp-image-4494\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-79.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-79-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Ya cuando terminemos de crear el laberinto denotaremos el inicio y el final<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-80.png\" alt=\"\" class=\"wp-image-4495\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-80.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-80-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Agregaremos los materiales a las paredes para darles aspecto de muro<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-81.png\" alt=\"\" class=\"wp-image-4496\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-81.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-81-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Repetiremos exactamente este mismo proceso para realizar el segundo nivel con el \u00fanico cambio de generar otro patr\u00f3n de laberinto<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-84.png\" alt=\"\" class=\"wp-image-4499\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-84.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-84-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-85.png\" alt=\"\" class=\"wp-image-4500\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-85.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-85-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Creaci\u00f3n de objetos<\/h1>\n\n\n\n<p>Empezaremos creando las puertas que funcionaran para demarcar el final del nivel<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-86.png\" alt=\"\" class=\"wp-image-4501\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-86.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-86-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>A estas les agregaremos un objeto vacio el cual cunplira la funcion de visagra<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-87.png\" alt=\"\" class=\"wp-image-4502\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-87.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-87-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Cambiaremos el orden de los objetos y dejaremos a la puerta como objeto heredado de la visagra<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-88.png\" alt=\"\" class=\"wp-image-4503\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-88.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-88-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>A esta bisagra le pondremos el siguiente script<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing UnityEngine;\nusing System.Collections;\n\u00a0\npublic class DoorScript : MonoBehaviour\n{\n\u00a0\n\u00a0\u00a0\u00a0 public static bool doorKey;\n\u00a0\u00a0\u00a0 public bool open;\n\u00a0\u00a0\u00a0 public bool close;\n\u00a0\u00a0\u00a0 public bool inTrigger;\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerEnter(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = true;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerExit(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = false;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (close)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (doorKey)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Input.GetKeyDown(KeyCode.E))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 open = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 close = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Input.GetKeyDown(KeyCode.E))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 close = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 open = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (open)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var newRot = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0.0f, -90.0f, 0.0f), Time.deltaTime * 200);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 transform.rotation = newRot;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var newRot = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0.0f, 0.0f, 0.0f), Time.deltaTime * 200);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 transform.rotation = newRot;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnGUI()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (open)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 0, 200, 25), \"Presiona la tecla E para cerrar\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (doorKey)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 0, 200, 25), \"Presiona la tecla E para abrir\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 0, 200, 25), \"\u00a1Necesitas una llave!\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>luego aumentaremos el espacio de choque de la puerta para que sea necesario activar las puertas<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-89.png\" alt=\"\" class=\"wp-image-4504\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-89.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-89-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>copiaremos el mismo proceso para la segunda puerta con la \u00fanica diferencia de cambiar el script por este<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"452\" height=\"238\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-90.png\" alt=\"\" class=\"wp-image-4505\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-90.png 452w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-90-300x158.png 300w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-90-390x205.png 390w\" sizes=\"auto, (max-width: 452px) 100vw, 452px\" \/><\/figure>\n\n\n\n<p>Este es el script de la siguiente puerta<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing UnityEngine;\nusing System.Collections;\n\u00a0\npublic class ScriptPuerta : MonoBehaviour\n{\n\u00a0\n\u00a0\u00a0\u00a0 public static bool llavePuerta;\n\u00a0\u00a0\u00a0 public bool open;\n\u00a0\u00a0\u00a0 public bool close;\n\u00a0\u00a0\u00a0 public bool inTrigger;\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerEnter(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = true;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerExit(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = false;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (close)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (llavePuerta)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Input.GetKeyDown(KeyCode.E))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 open = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 close = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Input.GetKeyDown(KeyCode.E))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 close = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 open = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (open)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var newRot = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0.0f, 90.0f, 0.0f), Time.deltaTime * 200);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 transform.rotation = newRot;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var newRot = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0.0f, 0.0f, 0.0f), Time.deltaTime * 200);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 transform.rotation = newRot;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnGUI()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (open)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 0, 200, 25), \"Presiona la tecla E para cerrar\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (llavePuerta)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 0, 200, 25), \"Presiona la tecla E para abrir\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 0, 200, 25), \"?Necesitas una llave!\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}\n<\/pre>\n\n\n\n<p>Luego crearemos el objeto de llave, tanto la idea de la puerta como la llave provienen de los assets creados por el siguiente video<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-91.png\" alt=\"\" class=\"wp-image-4506\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-91.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-91-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Este seria el link del video <a href=\"https:\/\/www.youtube.com\/watch?v=KL6rlUGucE4\">https:\/\/www.youtube.com\/watch?v=KL6rlUGucE4<\/a><\/p>\n\n\n\n<p>Crearemos dos objetos llaves y a cada uno le asignaremos su respectivo script, luego de esto buscaremos las llaves en las esquinas opuestas del mapa para darle mayor recorrido a los usuarios<\/p>\n\n\n\n<p>Llave 1<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-92.png\" alt=\"\" class=\"wp-image-4507\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-92.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-92-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-93.png\" alt=\"\" class=\"wp-image-4508\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-93.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-93-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>El script de la llave es este<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing UnityEngine;\nusing System.Collections;\n\u00a0\npublic class DoorKey : MonoBehaviour\n{\n\u00a0\n\u00a0\u00a0\u00a0 public bool inTrigger;\n\u00a0\u00a0\u00a0 public bool llaveObtenida2 = false;\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerEnter(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = true;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerExit(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = false;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Input.GetKeyDown(KeyCode.E))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DoorScript.doorKey = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Destroy(this.gameObject);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 llaveObtenida2 = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnGUI()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 60, 200, 25), \"Presione la E para obtener la llave\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>Llave 2<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-94.png\" alt=\"\" class=\"wp-image-4509\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-94.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-94-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"452\" height=\"216\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-95.png\" alt=\"\" class=\"wp-image-4510\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-95.png 452w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-95-300x143.png 300w\" sizes=\"auto, (max-width: 452px) 100vw, 452px\" \/><\/figure>\n\n\n\n<p>El script de la llave es este<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing UnityEngine;\nusing System.Collections;\n\u00a0\npublic class llavePuerta : MonoBehaviour\n{\n\u00a0\n\u00a0\u00a0\u00a0 public bool inTrigger;\n\u00a0\u00a0\u00a0 public bool llaveObtenida1 = false;\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerEnter(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = true;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerExit(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = false;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Input.GetKeyDown(KeyCode.E))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ScriptPuerta.llavePuerta = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Destroy(this.gameObject);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 llaveObtenida1 = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnGUI()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 1, 1, 1), \"Presione E para tomar la llave\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>Crearemos en el primer mapa el objeto que me permitira pasar al siguiente nivel<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-96.png\" alt=\"\" class=\"wp-image-4511\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-96.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-96-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Asignaremos que el objeto es trigger y le pondremos el siguiente script<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\nusing UnityEngine;\nusing System.Collections;\nusing UnityEngine.SceneManagement;\npublic class nextLevel : MonoBehaviour\n{\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerEnter(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (other.tag == \"Player\")\n{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SceneManager.LoadScene(\"Nivel2\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>Para que ese proceso funcione correctamente primero debemos construirlo<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-99.png\" alt=\"\" class=\"wp-image-4521\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-99.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-99-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Ya terminando este objeto, creando tanto las puertas como las llaves en ambos niveles crearemos el premio final el cual nos permitir\u00e1 observar la pantalla de juego terminado satisfactoriamente<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-100.png\" alt=\"\" class=\"wp-image-4522\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-100.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-100-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>A este objeto le colocaremos el siguiente script<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing UnityEngine;\nusing System.Collections;\nusing UnityEngine.SceneManagement;\n\u00a0\npublic class Ganar : MonoBehaviour\n{\n\u00a0\n\u00a0\u00a0\u00a0 public bool inTrigger;\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerEnter(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = true;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnTriggerExit(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inTrigger = false;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Input.GetKeyDown(KeyCode.E))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Destroy(this.gameObject);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SceneManager.LoadScene(\"Final\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void OnGUI()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (inTrigger)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GUI.Box(new Rect(0, 60, 200, 25), \"Presione E para tomar el trofeo\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Creacion del personaje<\/h1>\n\n\n\n<p>Para la creacion de nuestro personaje utilizaremos los siguientes assets<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"415\" height=\"183\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-106.png\" alt=\"\" class=\"wp-image-4531\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-106.png 415w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-106-300x132.png 300w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"411\" height=\"177\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-107.png\" alt=\"\" class=\"wp-image-4532\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-107.png 411w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-107-300x129.png 300w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/figure>\n\n\n\n<p>Utilizaremos un asset el cual nos brinda las armas, este se trae gracias a este video<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-108.png\" alt=\"\" class=\"wp-image-4533\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-108.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-108-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Insertaremos el siguiente personaje el cual obtenemos mediante el siguiente video este ya posee los scripts de movimiento y las manos que se pueden observar<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-109.png\" alt=\"\" class=\"wp-image-4535\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-109.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-109-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Los scripts que posee este personaje son los siguientes<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nFirstPersonController\nusing System;\nusing UnityEngine;\nusing UnityStandardAssets.CrossPlatformInput;\nusing UnityStandardAssets.Utility;\nusing Random = UnityEngine.Random;\n\u00a0\nnamespace UnityStandardAssets.Characters.FirstPerson\n{\n\u00a0\u00a0\u00a0 [RequireComponent(typeof (CharacterController))]\n\u00a0\u00a0\u00a0 [RequireComponent(typeof (AudioSource))]\n\u00a0\u00a0\u00a0 public class FirstPersonController : MonoBehaviour\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private bool m_IsWalking;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private float m_WalkSpeed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private float m_RunSpeed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] [Range(0f, 1f)] private float m_RunstepLenghten;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private float m_JumpSpeed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private float m_StickToGroundForce;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private float m_GravityMultiplier;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private MouseLook m_MouseLook;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private bool m_UseFovKick;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private FOVKick m_FovKick = new FOVKick();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private bool m_UseHeadBob;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private CurveControlledBob m_HeadBob = new CurveControlledBob();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private LerpControlledBob m_JumpBob = new LerpControlledBob();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private float m_StepInterval;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private AudioClip[] m_FootstepSounds;\u00a0\u00a0\u00a0 \/\/ an array of footstep sounds that will be randomly selected from.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private AudioClip m_JumpSound;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ the sound played when character leaves the ground.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [SerializeField] private AudioClip m_LandSound;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ the sound played when character touches back on ground.\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private Camera m_Camera;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private bool m_Jump;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private float m_YRotation;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private Vector2 m_Input;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private Vector3 m_MoveDir = Vector3.zero;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private CharacterController m_CharacterController;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private CollisionFlags m_CollisionFlags;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private bool m_PreviouslyGrounded;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private Vector3 m_OriginalCameraPosition;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private float m_StepCycle;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private float m_NextStep;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private bool m_Jumping;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private AudioSource m_AudioSource;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Use this for initialization\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void Start()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_CharacterController = GetComponent&lt;CharacterController&gt;();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Camera = Camera.main;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_OriginalCameraPosition = m_Camera.transform.localPosition;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_FovKick.Setup(m_Camera);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_HeadBob.Setup(m_Camera, m_StepInterval);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_StepCycle = 0f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_NextStep = m_StepCycle\/2f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Jumping = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_AudioSource = GetComponent&lt;AudioSource&gt;();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MouseLook.Init(transform , m_Camera.transform);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Update is called once per frame\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void Update()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RotateView();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ the jump state needs to read here to make sure it is not missed\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!m_Jump)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0m_Jump = CrossPlatformInputManager.GetButtonDown(\"Jump\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!m_PreviouslyGrounded &amp;&amp; m_CharacterController.isGrounded)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 StartCoroutine(m_JumpBob.DoBobCycle());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PlayLandingSound();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MoveDir.y = 0f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Jumping = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!m_CharacterController.isGrounded &amp;&amp; !m_Jumping &amp;&amp; m_PreviouslyGrounded)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MoveDir.y = 0f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_PreviouslyGrounded = m_CharacterController.isGrounded;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void PlayLandingSound()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_AudioSource.clip = m_LandSound;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_AudioSource.Play();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_NextStep = m_StepCycle + .5f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void FixedUpdate()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 float speed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GetInput(out speed);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ always move along the camera forward as it is the direction that it being aimed at\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Vector3 desiredMove = transform.forward*m_Input.y + transform.right*m_Input.x;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ get a normal for the surface that is being touched to move along it\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RaycastHit hitInfo;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Physics.SphereCast(transform.position, m_CharacterController.radius, Vector3.down, out hitInfo,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_CharacterController.height\/2f, Physics.AllLayers, QueryTriggerInteraction.Ignore);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 desiredMove = Vector3.ProjectOnPlane(desiredMove, hitInfo.normal).normalized;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MoveDir.x = desiredMove.x*speed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MoveDir.z = desiredMove.z*speed;\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (m_CharacterController.isGrounded)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MoveDir.y = -m_StickToGroundForce;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (m_Jump)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MoveDir.y = m_JumpSpeed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PlayJumpSound();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Jump = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Jumping = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MoveDir += Physics.gravity*m_GravityMultiplier*Time.fixedDeltaTime;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_CollisionFlags = m_CharacterController.Move(m_MoveDir*Time.fixedDeltaTime);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ProgressStepCycle(speed);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UpdateCameraPosition(speed);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MouseLook.UpdateCursorLock();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void PlayJumpSound()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_AudioSource.clip = m_JumpSound;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_AudioSource.Play();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void ProgressStepCycle(float speed)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (m_CharacterController.velocity.sqrMagnitude &gt; 0 &amp;&amp; (m_Input.x != 0 || m_Input.y != 0))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_StepCycle += (m_CharacterController.velocity.magnitude + (speed*(m_IsWalking ? 1f : m_RunstepLenghten)))*\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Time.fixedDeltaTime;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!(m_StepCycle &gt; m_NextStep))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_NextStep = m_StepCycle + m_StepInterval;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PlayFootStepAudio();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void PlayFootStepAudio()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!m_CharacterController.isGrounded)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ pick &amp; play a random footstep sound from the array,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ excluding sound at index 0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int n = Random.Range(1, m_FootstepSounds.Length);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_AudioSource.clip = m_FootstepSounds[n];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_AudioSource.PlayOneShot(m_AudioSource.clip);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ move picked sound to index 0 so it's not picked next time\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_FootstepSounds[n] = m_FootstepSounds[0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_FootstepSounds[0] = m_AudioSource.clip;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void UpdateCameraPosition(float speed)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Vector3 newCameraPosition;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!m_UseHeadBob)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (m_CharacterController.velocity.magnitude &gt; 0 &amp;&amp; m_CharacterController.isGrounded)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Camera.transform.localPosition =\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_HeadBob.DoHeadBob(m_CharacterController.velocity.magnitude +\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (speed*(m_IsWalking ? 1f : m_RunstepLenghten)));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 newCameraPosition = m_Camera.transform.localPosition;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 newCameraPosition.y = m_Camera.transform.localPosition.y - m_JumpBob.Offset();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 newCameraPosition = m_Camera.transform.localPosition;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 newCameraPosition.y = m_OriginalCameraPosition.y - m_JumpBob.Offset();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Camera.transform.localPosition = newCameraPosition;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void GetInput(out float speed)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Read input\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 float horizontal = CrossPlatformInputManager.GetAxis(\"Horizontal\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 float vertical = CrossPlatformInputManager.GetAxis(\"Vertical\");\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bool waswalking = m_IsWalking;\n\u00a0\n#if !MOBILE_INPUT\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ On standalone builds, walk\/run speed is modified by a key press.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ keep track of whether or not the character is walking or running\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_IsWalking = !Input.GetKey(KeyCode.LeftShift);\n#endif\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ set the desired speed to be walking or running\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 speed = m_IsWalking ? m_WalkSpeed : m_RunSpeed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Input = new Vector2(horizontal, vertical);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ normalize input if it exceeds 1 in combined length:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (m_Input.sqrMagnitude &gt; 1)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_Input.Normalize();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ handle speed change to give an fov kick\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ only if the player is going to a run, is running and the fovkick is to be used\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (m_IsWalking != waswalking &amp;&amp; m_UseFovKick &amp;&amp; m_CharacterController.velocity.sqrMagnitude &gt; 0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 StopAllCoroutines();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 StartCoroutine(!m_IsWalking ? m_FovKick.FOVKickUp() : m_FovKick.FOVKickDown());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void RotateView()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_MouseLook.LookRotation (transform, m_Camera.transform);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private void OnControllerColliderHit(ControllerColliderHit hit)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Rigidbody body = hit.collider.attachedRigidbody;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/dont move the rigidbody if the character is on top of it\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (m_CollisionFlags == CollisionFlags.Below)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (body == null || body.isKinematic)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 body.AddForceAtPosition(m_CharacterController.velocity*0.1f, hit.point, ForceMode.Impulse);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>Vida<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\u00a0\npublic class Vida : MonoBehaviour\n{\n\u00a0\u00a0\u00a0 public float valor = 100;\n\u00a0\u00a0\u00a0 public Vida padreRef;\n\u00a0\u00a0\u00a0 public float multiplicadorDeDa\u00f1o = 1.0f;\n\u00a0\u00a0\u00a0 public GameObject textoFlotantePrefab;\n\u00a0\u00a0\u00a0 public float da\u00f1oTotal;\n\u00a0\u00a0\u00a0 \/\/ Start is called before the first frame update\n\u00a0\u00a0\u00a0 void Start()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 \/\/ Update is called once per frame\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 public void RecibirDa\u00f1o(float da\u00f1o)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 da\u00f1o *= multiplicadorDeDa\u00f1o;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(padreRef != null)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 padreRef.RecibirDa\u00f1o(da\u00f1o);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 valor -= da\u00f1o;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 da\u00f1oTotal = da\u00f1o;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (valor &gt;= 0) MostrarTextoFlotante();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(valor &lt; 0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 valor = 0;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 MostrarTextoFlotante();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 void MostrarTextoFlotante()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var go = Instantiate(textoFlotantePrefab, transform.position, Quaternion.identity, transform);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/go.GetComponent&lt;TextMesh&gt;().text = da\u00f1oTotal.ToString();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 go.GetComponent&lt;TextMesh&gt;().text = valor.ToString();\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n}<\/pre>\n\n\n\n<p>LogicaJugador<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.SceneManagement;\n\u00a0\npublic class LogicaJugador : MonoBehaviour\n{\n\u00a0\u00a0\u00a0 public Vida vida;\n\u00a0\u00a0\u00a0 public bool Vida0 = false;\n\u00a0\u00a0\u00a0 [SerializeField] private Animator animadorPerder;\n\u00a0\u00a0\u00a0 \/\/ Start is called before the first frame update\n\u00a0\u00a0\u00a0 void Start()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vida = GetComponent&lt;Vida&gt;();\n\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 \/\/ Update is called once per frame\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RevisarVida();\n\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 void RevisarVida()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Vida0) return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(vida.valor &lt;=0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AudioListener.volume = 0f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 animadorPerder.SetTrigger(\"Mostrar\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Vida0 = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Invoke(\"ReiniciarJuego\", 2f);\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0}\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void ReiniciarJuego()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SceneManager.LoadScene(SceneManager.GetActiveScene().name);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AudioListener.volume = 1f;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 private void OnTriggerStay(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(other.gameObject.tag == \"Enemigo\")\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 gameObject.GetComponent&lt;AudioSource&gt;().volume = 0f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 private void OnTriggerExit(Collider other)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (other.gameObject.tag == \"Enemigo\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 gameObject.GetComponent&lt;AudioSource&gt;().volume = 1f;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>PantallaVida<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.UI;\n\u00a0\npublic class PantallaVida : MonoBehaviour\n{\n\u00a0public Text texto;\n\u00a0public Vida vida;\n\u00a0\n\/\/ Start is called before the first frame update\nvoid Start()\n{\n\u00a0\n}\n\u00a0\n\/\/ Update is called once per frame\nvoid Update()\n{\n\u00a0\u00a0\u00a0 texto.text = vida.valor + \"\/100\" ;\n}\n}<\/pre>\n\n\n\n<p>PantallaLlaves<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.UI;\n\u00a0\npublic class PantallaLlaves : MonoBehaviour\n{\n\u00a0\u00a0\u00a0 public Text texto;\n\u00a0\u00a0\u00a0 public RecolectorDeLlaves llaves;\n\u00a0\u00a0\u00a0 \/\/ Start is called before the first frame update\n\u00a0\u00a0\u00a0 void Start()\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 \/\/ Update is called once per frame\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 texto.text = \"LLaves: \" +llaves.contadorLlaves + \"\/2\";\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>Junto a estos Scripts ingresamos las siguientes animaciones para las acciones que ocurrir\u00e1n en el juego<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-111.png\" alt=\"\" class=\"wp-image-4538\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-111.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-111-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Creaci\u00f3n de enemigos<\/h1>\n\n\n\n<p>Para los enemigos debemos insertar el siguiente Asset<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"402\" height=\"172\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-112.png\" alt=\"\" class=\"wp-image-4539\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-112.png 402w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-112-300x128.png 300w\" sizes=\"auto, (max-width: 402px) 100vw, 402px\" \/><\/figure>\n\n\n\n<p>Estos son los asset de ellos<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-113.png\" alt=\"\" class=\"wp-image-4540\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-113.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-113-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Estos son los assets que poseen los enemigos<\/p>\n\n\n\n<p>LogicaEnemigo<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.AI;\n\u00a0\npublic class LogicaEnemigo : MonoBehaviour\n{\n\u00a0\u00a0\u00a0 private GameObject target;\n\u00a0\u00a0\u00a0 private NavMeshAgent agente;\n\u00a0\u00a0\u00a0 private Vida vida;\n\u00a0\u00a0\u00a0 private Animator animator;\n\u00a0\u00a0\u00a0 private Collider collider;\n\u00a0\u00a0\u00a0 private Vida vidaJugador;\n\u00a0\u00a0\u00a0 private LogicaJugador logicaJugador;\n\u00a0\u00a0\u00a0 public bool Vida0 = false;\n\u00a0\u00a0\u00a0 public bool estaAtacando = false;\n\u00a0\u00a0\u00a0 public float speed = 1.0f;\n\u00a0\u00a0\u00a0 public float angularSpeed = 120;\n\u00a0\u00a0\u00a0 public float da\u00f1o = 10;\n\u00a0\u00a0\u00a0 public bool estaMirando;\n\u00a0\n\u00a0\u00a0\u00a0 \/\/ Start is called before the first frame update\n\u00a0\u00a0\u00a0 void Start()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 target = GameObject.Find(\"Jugador\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vidaJugador = target.GetComponent&lt;Vida&gt;();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(vidaJugador==null)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 throw new System.Exception(\"El objeto Jugador no tiene componente vida\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 logicaJugador = target.GetComponent&lt;LogicaJugador&gt;();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (logicaJugador == null)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 throw new System.Exception(\"El objeto Jugador no tiene componente LogicaJugador\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 agente = GetComponent&lt;NavMeshAgent&gt;();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vida = GetComponent&lt;Vida&gt;();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 animator = GetComponent&lt;Animator&gt;();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 collider = GetComponent&lt;Collider&gt;();\n\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 \/\/ Update is called once per frame\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RevisarVida();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Perseguir();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RevisarAtaque();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 EstaDeFrenteAlJugador();\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void EstaDeFrenteAlJugador()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Vector3 adelante = transform.forward;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Vector3 targetJugador = (GameObject.Find(\"Jugador\").transform.position -transform.position).normalized;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(Vector3.Dot(adelante,targetJugador)&lt;0.6f)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 estaMirando = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 estaMirando = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void RevisarVida()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Vida0) return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (vida.valor &lt;= 0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Vida0 = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 agente.isStopped = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 collider.enabled = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 animator.CrossFadeInFixedTime(\"Vida0\", 0.1f);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Destroy(gameObject, 3f);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void Perseguir()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Vida0) return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (logicaJugador.Vida0) return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 agente.destination = target.transform.position;\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void RevisarAtaque()\n\u00a0\u00a0\u00a0 {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Vida0) return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (estaAtacando) return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (logicaJugador.Vida0) return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 float distanciaDelBlanco = Vector3.Distance(target.transform.position, transform.position);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (distanciaDelBlanco &lt;= 2.0 &amp;&amp; estaMirando)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Atacar();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void Atacar()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vidaJugador.RecibirDa\u00f1o(da\u00f1o);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 agente.speed = 0;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 agente.angularSpeed = 0;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 estaAtacando = true;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 animator.SetTrigger(\"DebeAtacar\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Invoke(\"ReiniciarAtaque\", 1.5f);\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 void ReiniciarAtaque()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 estaAtacando = false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 agente.speed = speed;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 agente.angularSpeed = angularSpeed;\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<p>Vida<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\u00a0\npublic class Vida : MonoBehaviour\n{\n\u00a0\u00a0\u00a0 public float valor = 100;\n\u00a0\u00a0\u00a0 public Vida padreRef;\n\u00a0\u00a0\u00a0 public float multiplicadorDeDa\u00f1o = 1.0f;\n\u00a0\u00a0\u00a0 public GameObject textoFlotantePrefab;\n\u00a0\u00a0\u00a0 public float da\u00f1oTotal;\n\u00a0\u00a0\u00a0 \/\/ Start is called before the first frame update\n\u00a0\u00a0\u00a0 void Start()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 \/\/ Update is called once per frame\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 public void RecibirDa\u00f1o(float da\u00f1o)\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 da\u00f1o *= multiplicadorDeDa\u00f1o;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(padreRef != null)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 padreRef.RecibirDa\u00f1o(da\u00f1o);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 valor -= da\u00f1o;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 da\u00f1oTotal = da\u00f1o;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (valor &gt;= 0) MostrarTextoFlotante();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(valor &lt; 0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 valor = 0;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 MostrarTextoFlotante();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0 \u00a0\u00a0}\n\u00a0\u00a0\u00a0 void MostrarTextoFlotante()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var go = Instantiate(textoFlotantePrefab, transform.position, Quaternion.identity, transform);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/go.GetComponent&lt;TextMesh&gt;().text = da\u00f1oTotal.ToString();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 go.GetComponent&lt;TextMesh&gt;().text = valor.ToString();\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\n}<\/pre>\n\n\n\n<p>junto a esto tambien dentro del mapa insertaremos los puntos donde se podran generar los enemigos, los cuales sirven en base a este script<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\n\n\n&lt;!-- \/* Font Definitions *\/ @font-face {font-family:\"Cambria Math\"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} \/* Style Definitions *\/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:\"\"; margin:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-fareast-font-family:Arial; mso-ansi-language:#000A;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:11.0pt; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:\"Arial\",sans-serif; mso-ascii-font-family:Arial; mso-fareast-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; mso-ansi-language:#000A;} .MsoPapDefault {mso-style-type:export-only; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} --&gt;\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\u00a0\npublic class GeneradorDeEnemigos : MonoBehaviour\n{\n\u00a0\u00a0\u00a0 public GameObject zombiePrefab;\n\u00a0\u00a0\u00a0 public Transform[] puntosDeGeneracion;\n\u00a0\u00a0\u00a0 public float tiempoDeGeneracion = 5f;\n\u00a0\u00a0\u00a0 \/\/ Start is called before the first frame update\n\u00a0\u00a0\u00a0 void Start()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 puntosDeGeneracion = new Transform[transform.childCount];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for(int i =0; i&lt;transform.childCount; i++)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 puntosDeGeneracion[i] = transform.GetChild(i);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 StartCoroutine(AparecerEnemigo());\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 IEnumerator AparecerEnemigo()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 while(true)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for(int i = 0; i &lt; puntosDeGeneracion.Length ; i++)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Transform puntodeGeneracion = puntosDeGeneracion[i];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Instantiate(zombiePrefab, puntodeGeneracion.position, puntodeGeneracion.rotation);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 yield return new WaitForSeconds(tiempoDeGeneracion);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 }\n\u00a0\n\u00a0\u00a0\u00a0 \/\/ Update is called once per frame\n\u00a0\u00a0\u00a0 void Update()\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0 }\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Creaci\u00f3n de Canvas<\/h1>\n\n\n\n<p>Para la creaci\u00f3n del canvas utilizaremos la imagen brindada por nuestro compa\u00f1ero Daniel Enrique Mayorga Garc\u00eda, estudiante de Arte y medios audiovisuales de la Universidad Aut\u00f3noma de Bucaramanga. junto a esto utilizaremos el siguiente asset que ya nos entrega varias funcionalidades como la de iniciar el juego<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-121.png\" alt=\"\" class=\"wp-image-4548\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-121.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-121-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Este menu proviene del siguiente asset<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"194\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-123.png\" alt=\"\" class=\"wp-image-4550\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-123.png 450w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-123-300x129.png 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p>Luego de esto crearemos la parte visual que el jugador observa, dentro de esta ubicamos, la cantidad de llaves recogidas para el ingreso, el n\u00famero de balas que posee, y un punto de mira para saber donde se est\u00e1 apuntando mediante el canvas<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-124.png\" alt=\"\" class=\"wp-image-4551\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-124.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-124-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Luego dise\u00f1aremos la pantalla tanto de game over como la de que se finaliz\u00f3 el juego satisfactoriamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"282\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-125.png\" alt=\"\" class=\"wp-image-4552\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-125.png 451w, https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-125-300x188.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p><strong>Autor<\/strong>: Sebastian Rodriguez Velasquez, Nicol\u00e1s Esteban Echeverri S\u00e1nchez<\/p>\n\n\n\n<p><strong>Editor:<\/strong>&nbsp;<a href=\"https:\/\/niixer.com\/?s=carlos+ivan+pinzon\">Carlos Iv\u00e1n Pinz\u00f3n<\/a><\/p>\n\n\n\n<p><strong>C\u00f3digo<\/strong>: UCRV-8<\/p>\n\n\n\n<p><strong>Universidad:<\/strong>&nbsp;<a href=\"https:\/\/www.ucentral.edu.co\/\">Universidad Central<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creacion del entorno Empezaremos creando un objeto 3d tipo Terrain Utilizaremos la herramienta para la creacion de monta\u00f1as Importaremos los arboles del siguiente asset Rellenaremos el espacio de los arboles con la siguiente herramienta Aplicaremos al entorno distintos materiales para diversificar el suelo Crearemos las paredes externas las cuales ser\u00e1nSeguir Leyendo<\/p>\n","protected":false},"author":59,"featured_media":0,"comment_status":"open","ping_status":"open","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-4484","post","type-post","status-publish","format-standard","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>Manual de Creacion Juegode laberinto en 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 | Manual de Creacion Juegode laberinto en 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\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Manual de Creacion Juegode laberinto en 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 | Manual de Creacion Juegode laberinto en Unity\" \/>\n<meta property=\"og:url\" content=\"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/\" \/>\n<meta property=\"og:site_name\" content=\"Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/niixer\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-04T00:33:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-04T00:33:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png\" \/>\n<meta name=\"author\" content=\"Sebastian Rodriguez Velasquez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sebastian Rodriguez Velasquez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Manual de Creacion Juegode laberinto en 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 | Manual de Creacion Juegode laberinto en 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\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/","og_locale":"es_ES","og_type":"article","og_title":"Manual de Creacion Juegode laberinto en 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 | Manual de Creacion Juegode laberinto en Unity","og_url":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/","og_site_name":"Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","article_publisher":"https:\/\/www.facebook.com\/niixer\/","article_published_time":"2020-12-04T00:33:39+00:00","article_modified_time":"2020-12-04T00:33:42+00:00","og_image":[{"url":"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png","type":"","width":"","height":""}],"author":"Sebastian Rodriguez Velasquez","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Sebastian Rodriguez Velasquez","Tiempo de lectura":"20 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#article","isPartOf":{"@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/"},"author":{"name":"Sebastian Rodriguez Velasquez","@id":"https:\/\/niixer.com\/#\/schema\/person\/a0fd2ca3e37e8545c13e9e0cb178584f"},"headline":"Manual de Creacion Juegode laberinto en Unity","datePublished":"2020-12-04T00:33:39+00:00","dateModified":"2020-12-04T00:33:42+00:00","mainEntityOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/"},"wordCount":695,"commentCount":0,"publisher":{"@id":"https:\/\/niixer.com\/#organization"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png","articleSection":["Niixer"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/","url":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/","name":"Manual de Creacion Juegode laberinto en Unity &#8211; Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","isPartOf":{"@id":"https:\/\/niixer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#primaryimage"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png","datePublished":"2020-12-04T00:33:39+00:00","dateModified":"2020-12-04T00:33:42+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 | Manual de Creacion Juegode laberinto en Unity","breadcrumb":{"@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#primaryimage","url":"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2020\/12\/image-72.png","width":451,"height":282},{"@type":"BreadcrumbList","@id":"https:\/\/niixer.com\/index.php\/2020\/12\/03\/manual-de-creacion-juegode-laberinto-en-unity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/niixer.com\/"},{"@type":"ListItem","position":2,"name":"Manual de Creacion Juegode laberinto en Unity"}]},{"@type":"WebSite","@id":"https:\/\/niixer.com\/#website","url":"https:\/\/niixer.com\/","name":"Portal de noticias de tecnolog\u00eda, ciencia, Android, iOS, Realidad Virtual, Aumentada y Mixta, Videojuegos, computadores, todo lo mas reciente en tecnolog\u00eda","description":"Portal de noticias de tecnolog\u00eda","publisher":{"@id":"https:\/\/niixer.com\/#organization"},"alternateName":"Niixer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/niixer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/niixer.com\/#organization","name":"Niixer","alternateName":"Niixer.com","url":"https:\/\/niixer.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/#\/schema\/logo\/image\/","url":"https:\/\/niixer.com\/wp-content\/uploads\/2022\/08\/logo-niixer-sin-fondo-1.png","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2022\/08\/logo-niixer-sin-fondo-1.png","width":140,"height":140,"caption":"Niixer"},"image":{"@id":"https:\/\/niixer.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/niixer\/","https:\/\/www.instagram.com\/niixer.tecnologia\/"]},{"@type":"Person","@id":"https:\/\/niixer.com\/#\/schema\/person\/a0fd2ca3e37e8545c13e9e0cb178584f","name":"Sebastian Rodriguez Velasquez","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/af70217cff56ade69e7fd0fbce13e15f45f07c3399901a6d9c47df3d1b916a71?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/af70217cff56ade69e7fd0fbce13e15f45f07c3399901a6d9c47df3d1b916a71?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/af70217cff56ade69e7fd0fbce13e15f45f07c3399901a6d9c47df3d1b916a71?s=96&d=mm&r=g","caption":"Sebastian Rodriguez Velasquez"},"sameAs":["http:\/\/www.niixer.com"],"url":"https:\/\/niixer.com\/index.php\/author\/srodriguezv3\/"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/4484","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\/59"}],"replies":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/comments?post=4484"}],"version-history":[{"count":1,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/4484\/revisions"}],"predecessor-version":[{"id":4565,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/4484\/revisions\/4565"}],"wp:attachment":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media?parent=4484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/categories?post=4484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/tags?post=4484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}