{"id":11132,"date":"2021-01-27T20:51:57","date_gmt":"2021-01-27T18:51:57","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=11132"},"modified":"2021-03-06T19:04:36","modified_gmt":"2021-03-06T17:04:36","slug":"first-person-controller-unity","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/","title":{"rendered":"First Person Controller en Unity"},"content":{"rendered":"<p style=\"text-align: justify;\">En este post aprenderemos a crear un<strong> First Person Controller en Unity<\/strong>, desde cero.<\/p>\n<p style=\"text-align: justify;\">Generalmente el movimiento en Unity se puede hacer de dos formas:<\/p>\n<p style=\"text-align: justify;\">-Usando el <a href=\"https:\/\/docs.unity3d.com\/ScriptReference\/Rigidbody.html\">RigidBody<\/a><\/p>\n<p style=\"text-align: justify;\">-Usando el <a href=\"https:\/\/docs.unity3d.com\/ScriptReference\/CharacterController.html\">Character Controller<\/a><\/p>\n<p style=\"text-align: justify;\">Cada uno tiene sus ventajas dependiendo de lo que queramos. Es decir, no existe un controlador de movimiento universal, ya que dependiendo del juego puede variar.<\/p>\n<p style=\"text-align: justify;\">Character Controller<\/p>\n<ul style=\"text-align: justify;\">\n<li>Controlar los pasos<\/li>\n<li>Controlar las pendientes<\/li>\n<li>No te sueles quedar enganchado en las paredes<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Rigidbody<\/p>\n<ul style=\"text-align: justify;\">\n<li>Gravedad<\/li>\n<li>Arrastre incorporado<\/li>\n<li>Interact\u00faa con objetos f\u00edsicos<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">En nuestro caso vamos a utilizar el <strong>Character Controller<\/strong>. Primero de todo vamos a generar un plano por donde avanzar\u00e1 nuestro player, y a\u00f1adiremos un <strong>empty GameObject<\/strong>, con el <strong>Character Controller.<\/strong><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EmptyObject.png\" rel=\"attachment wp-att-11162\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11162 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EmptyObject.png\" alt=\"\" width=\"192\" height=\"266\" \/><\/a><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerComponent.png\" rel=\"attachment wp-att-11195\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11195 size-medium\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerComponent-300x282.png\" alt=\"\" width=\"300\" height=\"282\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerComponent-300x282.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerComponent.png 565w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Para visibilizar nuestro player a\u00f1adiremos un <strong>cilindro<\/strong> como hijo del empty, y le quitaremos el collider, ya que el Character Controller ya nos lo ofrece. Y al ser un personaje en primera persona, la c\u00e1mara tambi\u00e9n ser\u00e1 hijo del FirstPersonController, para que compartan la misma posici\u00f3n.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/RemoveCollider.png\" rel=\"attachment wp-att-11180\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11180 \" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/RemoveCollider.png\" alt=\"\" width=\"343\" height=\"478\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/RemoveCollider.png 568w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/RemoveCollider-215x300.png 215w\" sizes=\"auto, (max-width: 343px) 100vw, 343px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Para crear nuestro controlador vamos a necesitar dos scripts, uno para el movimiento de la c\u00e1mara y otro para el movimiento del player.<\/p>\n<h2 style=\"text-align: justify;\"><strong>Mouse Look.cs<\/strong><\/h2>\n<p style=\"text-align: justify;\">A continuaci\u00f3n, vamos a crear el primer script para controlar hacia donde miramos, <strong>a\u00f1adi\u00e9ndolo en la c\u00e1mara<\/strong>. Vamos a usar el rat\u00f3n para escoger la direcci\u00f3n. El mouse tiene dos ejes X e Y, si movemos a derecha e izquierda con el rat\u00f3n estaremos modificando el eje X, y si movemos de arriba a abajo modificaremos el eje Y.<\/p>\n<p style=\"text-align: justify;\">Cuando modifiquemos la <strong>X<\/strong> de nuestro rat\u00f3n queremos que nuestro <strong>personaje rote en el eje Y<\/strong><\/p>\n<p style=\"text-align: justify;\">Y para el eje <strong>Y<\/strong> del rat\u00f3n modificaremos la <strong>rotaci\u00f3n de la c\u00e1mara en X<\/strong>. Para entenderlo mejor, tenemos que verlo desde Unity:<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeY-1.png\" rel=\"attachment wp-att-11188\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11188 size-large\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeY-1-1024x401.png\" alt=\"\" width=\"1024\" height=\"401\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeY-1-1024x401.png 1024w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeY-1-300x118.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeY-1-768x301.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeY-1-700x274.png 700w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeY-1.png 1707w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeX.png\" rel=\"attachment wp-att-11189\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11189 size-large\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeX-1024x409.png\" alt=\"\" width=\"1024\" height=\"409\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeX-1024x409.png 1024w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeX-300x120.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeX-768x307.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeX-700x279.png 700w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/EjeX.png 1706w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Tambi\u00e9n deberemos marcar unos <strong>l\u00edmites<\/strong> en la rotaci\u00f3n de la c\u00e1mara.<\/p>\n<p style=\"text-align: justify;\">Una vez creado el script, vamos a crear dos floats que nos vayan a indicar la posici\u00f3n de nuestro rat\u00f3n, en Y y en X. Unity nos incluye en <strong>Edit\/ProjectSettings\/InputManager <\/strong>una serie de controles que nos sirven para detectar el Input de ciertos botones, mostrar ciertas posiciones del rat\u00f3n&#8230; en este caso con el<strong> Input.GetAxis(\u201cMouse X\u201d)<\/strong> y el<strong> Input.GetAxis(\u201cMouse Y\u201d)<\/strong> nos devuelve el n\u00famero de p\u00edxeles que se ha movido el rat\u00f3n desde la \u00faltima posici\u00f3n que ten\u00eda. Estos n\u00fameros los vamos a multiplicar por una sensibilidad 100 y por el tiempo de cada frame.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsMouse.png\" rel=\"attachment wp-att-11164\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11164 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsMouse.png\" alt=\"\" width=\"788\" height=\"169\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsMouse.png 788w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsMouse-300x64.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsMouse-768x165.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsMouse-700x150.png 700w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Ya tenemos iniciadas las 2 variables, estas tienen que modificar la rotaci\u00f3n de nuestro personaje as\u00ed que crearemos la variable playerBody de tipo Transform, cogemos el Transform de nuestro jugador y rotaremos en el eje Y (Vector3.up) y la multiplicaremos por el movimiento del rat\u00f3n en X.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/transformPlayer.png\" rel=\"attachment wp-att-11183\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-11183\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/transformPlayer-300x24.png\" alt=\"\" width=\"300\" height=\"24\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/transformPlayer-300x24.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/transformPlayer.png 303w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/playerRotate.png\" rel=\"attachment wp-att-11179\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11179 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/playerRotate.png\" alt=\"\" width=\"429\" height=\"36\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/playerRotate.png 429w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/playerRotate-300x25.png 300w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Nuestro personaje ya rota en la Y moviendo el mouse en el eje X, ahora solo queda hacia arriba o hacia abajo. Crearemos otra variable tipo float para registrar el giro de X de la c\u00e1mara, haremos el c\u00e1lculo poni\u00e9ndole unos l\u00edmites y a\u00f1adiremos en nuestra c\u00e1mara esta rotaci\u00f3n, al tener la c\u00e1mara como hijo, necesitamos usar el localRotation.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatRotacion.png\" rel=\"attachment wp-att-11163\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11163 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatRotacion.png\" alt=\"\" width=\"253\" height=\"25\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/lineaRotacion.png\" rel=\"attachment wp-att-11172\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11172 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/lineaRotacion.png\" alt=\"\" width=\"650\" height=\"112\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/lineaRotacion.png 650w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/lineaRotacion-300x52.png 300w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Antes de pasar al movimiento podemos a\u00f1adir una l\u00ednea en el Start para que el cursor siempre aparezca en el centro de la pantalla.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/cursorCentrado.png\" rel=\"attachment wp-att-11158\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11158 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/cursorCentrado.png\" alt=\"\" width=\"454\" height=\"37\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/cursorCentrado.png 454w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/cursorCentrado-300x24.png 300w\" sizes=\"auto, (max-width: 454px) 100vw, 454px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Ya tenemos todas las rotaciones de nuestra c\u00e1mara y player. A continuaci\u00f3n, vamos a crear el script para el<strong> movimiento<\/strong> de nuestro player.<\/p>\n<h2 style=\"text-align: justify;\">Player Movement.cs<\/h2>\n<p style=\"text-align: justify;\">Para explicar el movimiento debemos conocer el <strong>GetAxis(\u201cHorizontal\u201d)<\/strong> y el<strong> GetAxis (\u201cVertical\u201d)<\/strong> funcionan como el mouse X y el mouse Y, pero en este caso no nos detectan las posiciones del rat\u00f3n, sino que detectan cuando estamos pulsando <strong>A, D y flecha izquierda y derecha<\/strong> para <strong>GetAxis(\u201cHorizontal\u201d)<\/strong>, devolvi\u00e9ndonos un -1 para la izquierda y un +1 para la derecha. Y <strong>W y S y las flechitas del teclado de arriba y abajo<\/strong> para el <strong>GetAxis(\u201cVertical\u201d)<\/strong>, tambi\u00e9n devolviendo un -1 y un +1.<\/p>\n<p style=\"text-align: justify;\">Una vez sabemos esto, vamos a crear dos variables para la X y la Z que es el movimiento del jugador.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsTeclas.png\" rel=\"attachment wp-att-11165\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11165 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsTeclas.png\" alt=\"\" width=\"434\" height=\"63\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsTeclas.png 434w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/floatsTeclas-300x44.png 300w\" sizes=\"auto, (max-width: 434px) 100vw, 434px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Seguidamente les proporcionaremos la direcci\u00f3n, usando el transform.right, nos coge el vector (1,0,0) y se lo multiplicamos a nuestra x (positivo o negativo depende que tecla estemos pulsando, ya que devuelve -1 o 1) y le sumaremos transform.forward, que nos coge el vector (0,0,1), multiplicado por z.\u00a0 Con esta l\u00ednea ya tenemos la direcci\u00f3n. <strong>(Si nos movemos hacia la derecha en el eje X este Vector3 ser\u00e1 (1, 0, 0), si nos movemos hacia delante, el eje Z ser\u00e1 (0, 0, 1)).<\/strong><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/moveVector3.png\" rel=\"attachment wp-att-11176\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11176 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/moveVector3.png\" alt=\"\" width=\"596\" height=\"31\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/moveVector3.png 596w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/moveVector3-300x16.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/moveVector3-570x31.png 570w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Para que se mueva nuestro personaje deberemos declarar una nueva variable de tipo Character Controller, ya que tiene un m\u00e9todo para moverse.\u00a0 Este m\u00e9todo pide un Vector3, justo lo que ya tenemos creado. Este Vector3 lo vamos a multiplicar por una velocidad y que se mueva con el tiempo.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterController.png\" rel=\"attachment wp-att-11154\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11154 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterController.png\" alt=\"\" width=\"333\" height=\"28\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterController.png 333w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterController-300x25.png 300w\" sizes=\"auto, (max-width: 333px) 100vw, 333px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerMove.png\" rel=\"attachment wp-att-11156\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11156 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerMove.png\" alt=\"\" width=\"387\" height=\"34\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerMove.png 387w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/CharacterControllerMove-300x26.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">En este punto nuestro personaje ya se mover\u00e1 correctamente y con completa libertad, pero falta a\u00f1adir la gravedad.\u00a0Vamos al script del player y a\u00f1adiremos dos nuevas variables:<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Gravedad.png\" rel=\"attachment wp-att-11167\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11167 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Gravedad.png\" alt=\"\" width=\"341\" height=\"53\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Gravedad.png 341w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Gravedad-300x47.png 300w\" sizes=\"auto, (max-width: 341px) 100vw, 341px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Vamos a escribir en el <strong>U<\/strong><strong>pdate<\/strong> que la velocidad en Y, es decir la direcci\u00f3n de Y en este nuevo Vector3, es igual a esta velocidad multiplicada por la gravedad por el tiempo. Y se lo a\u00f1adiremos al Character Controller como hemos hecho antes, afectando solo en el eje Y del player, pero multiplicando otra vez por el tiempo, ya que la gravedad se multiplica por tiempo al cuadrado.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/MoveGravity.png\" rel=\"attachment wp-att-11174\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11174 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/MoveGravity.png\" alt=\"\" width=\"440\" height=\"65\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/MoveGravity.png 440w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/MoveGravity-300x44.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Si nos fijamos en la variable de velocidad en Y, vemos que cada segundo se reduce en 9,81 y si nos cay\u00e9semos de cualquier sitio lo har\u00edamos a much\u00edsima velocidad, ya que no para nunca. Para corregir este problema, necesitaremos comprobar el suelo. Para comprobar que estamos tocando el suelo crearemos un objeto empty en los pies del jugador.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/GroundCheck.png\" rel=\"attachment wp-att-11168\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11168 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/GroundCheck.png\" alt=\"\" width=\"213\" height=\"120\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">En este punto generamos una peque\u00f1a esfera que nos detectara si el objeto con el cual colision\u00f3 tiene una LayerMask determinada. Vamos a verlo a continuaci\u00f3n, crearemos 4 variables.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/LayerMask.png\" rel=\"attachment wp-att-11171\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11171 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/LayerMask.png\" alt=\"\" width=\"386\" height=\"103\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/LayerMask.png 386w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/LayerMask-300x80.png 300w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">En el Update, escribiremos la l\u00ednea para que la booleana sea cierta cuando nuestra esfera colisione con la capa seleccionada. Si la esfera collisiona con la Capa \u201cfloorMask\u201d y la velocidad en Y es negativa le pondremos el valor de Y ser\u00e1 -2.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/isGrounded.png\" rel=\"attachment wp-att-11169\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11169 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/isGrounded.png\" alt=\"\" width=\"901\" height=\"47\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/isGrounded.png 901w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/isGrounded-300x16.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/isGrounded-768x40.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/isGrounded-700x37.png 700w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Comprobaci\u00f3nGrounded.png\" rel=\"attachment wp-att-11157\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-11157\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Comprobaci\u00f3nGrounded-300x103.png\" alt=\"\" width=\"300\" height=\"103\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Comprobaci\u00f3nGrounded-300x103.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Comprobaci\u00f3nGrounded-345x119.png 345w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Comprobaci\u00f3nGrounded.png 346w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/newLayer.png\" rel=\"attachment wp-att-11177\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11177 \" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/newLayer.png\" alt=\"\" width=\"428\" height=\"195\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/newLayer.png 505w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/newLayer-300x137.png 300w\" sizes=\"auto, (max-width: 428px) 100vw, 428px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Para crear y a\u00f1adir la capa debemos dirigirnos al inspector de Unity en <strong>Layer\/Default\/Add Layer,<\/strong> a\u00f1adimos la nueva capa y se la seleccionamos a todos los objetos de nuestra escena.<\/p>\n<h2>Salto<\/h2>\n<p style=\"text-align: justify;\">Ahora ya solo nos quedar\u00eda a\u00f1adir el <strong>salto<\/strong> a nuestro movimiento.<\/p>\n<p style=\"text-align: justify;\">Para implementar el salto vamos a usar otro de los Inputs que nos proporciona Unity. Y le decimos que nos haga el salto si pulsamos la tecla de saltar y si est\u00e1 en el suelo. Usaremos una f\u00f3rmula f\u00edsica para saltar la distancia que queramos: ra\u00edz cuadrada de la altura (3) que queremos saltar *-2 *gravedad.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Salto.png\" rel=\"attachment wp-att-11181\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11181 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Salto.png\" alt=\"\" width=\"522\" height=\"116\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Salto.png 522w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Salto-300x67.png 300w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/><\/a> <a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/formulaSalto.jpg\" rel=\"attachment wp-att-11166\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11166\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/formulaSalto-300x151.jpg\" alt=\"\" width=\"300\" height=\"151\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/formulaSalto-300x151.jpg 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/formulaSalto.jpg 351w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Ya tenemos nuestro <strong>First Person Controller<\/strong> completo, quedar\u00eda algo as\u00ed:<\/p>\n<p><strong>Mouse Look<\/strong><\/p>\n<pre class=\"theme:monokai font-size:13 line-height:20 float-enable:true lang:c# decode:true\" title=\"MouseLook\">using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class MouseLook : MonoBehaviour\r\n{\r\n    public float Sensibilidad = 100;\r\n    public Transform playerBody;\r\n    public float xRotacion;\r\n    private void Start()\r\n    {\r\n        Cursor.lockState = CursorLockMode.Locked;\r\n    }\r\n    void Update()\r\n    {\r\n        float mouseX = Input.GetAxis(\"Mouse X\")*Sensibilidad*Time.deltaTime;\r\n        float mouseY = Input.GetAxis(\"Mouse Y\")*Sensibilidad*Time.deltaTime;\r\n\r\n        xRotacion -= mouseY;\r\n        xRotacion = Mathf.Clamp(xRotacion, -90, 90);\r\n\r\n        transform.localRotation = Quaternion.Euler(xRotacion, 0, 0);\r\n        \r\n        playerBody.Rotate(Vector3.up * mouseX);\r\n        print(xRotacion);\r\n        \r\n    }\r\n}<\/pre>\n<p><strong>Player Movement<\/strong><\/p>\n<pre class=\"theme:monokai font-size:13 line-height:20 lang:c# decode:true \" title=\"Player Movement\">using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class PlayerMovement : MonoBehaviour\r\n{\r\n    public CharacterController cc;\r\n    public float Velocidad=12;\r\n\r\n    public float Gravedad = -9.81f;\r\n    public Vector3 velocity;\r\n\r\n    public Transform groundCheck;\r\n    public float groundDistance = 0.4f;\r\n    public LayerMask floorMask;\r\n    bool isGrounded;\r\n    void Update()\r\n    {\r\n        isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, floorMask);\r\n        \r\n        if (isGrounded &amp;&amp; velocity.y&lt;0)\r\n        {\r\n            velocity.y = -2f;\r\n        }\r\n\r\n        if (Input.GetButtonDown(\"Jump\") &amp;&amp; isGrounded)\r\n        {\r\n            velocity.y = Mathf.Sqrt(3 * -2 * Gravedad);\r\n        }\r\n\r\n        float x = Input.GetAxis(\"Horizontal\");\r\n        float z= Input.GetAxis(\"Vertical\");\r\n\r\n        Vector3 move = transform.right * x+transform.forward*z;\r\n        cc.Move(move*Velocidad*Time.deltaTime);\r\n        \r\n\r\n        velocity.y += Gravedad * Time.deltaTime;\r\n        cc.Move(velocity * Time.deltaTime);\r\n\r\n    }\r\n}<\/pre>\n<p>Si os ha sido de utilidad el <strong>First Person Controller<\/strong>, pod\u00e9is echar un vistazo al\u00a0<strong>Third Person Controller <\/strong>pulsando\u00a0<a href=\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/\">aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este post aprenderemos a crear un First Person Controller con Unity, desde cero. Programar el movimiento del personaje y de la c\u00e1mara en primera persona con Unity. <\/p>\n","protected":false},"author":37,"featured_media":11208,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_ef_editorial_meta_date_first-draft-date":"","_ef_editorial_meta_paragraph_assignment":"","_ef_editorial_meta_checkbox_needs-photo":"","_ef_editorial_meta_number_word-count":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[218,5],"tags":[71,780,781,528,782,89,37,322],"class_list":["post-11132","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-escola-espai","category-programacion","tag-3d","tag-csharp","tag-camara","tag-escola-espai","tag-primera-persona","tag-programacion-2","tag-tutorial","tag-unity"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>First Person Controller en Unity - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"Como realizar un First Person Controller, movimiento del personaje y de la c\u00e1mara en primera persona con Unity. C\u00e1mara apuntando al cursor y saltos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"First Person Controller en Unity - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"Como realizar un First Person Controller, movimiento del personaje y de la c\u00e1mara en primera persona con Unity. C\u00e1mara apuntando al cursor y saltos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-27T18:51:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-06T17:04:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"David Roca\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Roca\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\"},\"author\":{\"name\":\"David Roca\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\"},\"headline\":\"First Person Controller en Unity\",\"datePublished\":\"2021-01-27T18:51:57+00:00\",\"dateModified\":\"2021-03-06T17:04:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\"},\"wordCount\":1216,\"commentCount\":13,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png\",\"keywords\":[\"3d\",\"c#sharp\",\"camara\",\"Escola Espai\",\"primera persona\",\"programaci\u00f3n\",\"tutorial\",\"unity\"],\"articleSection\":[\"Escola Espai\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\",\"name\":\"First Person Controller en Unity - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png\",\"datePublished\":\"2021-01-27T18:51:57+00:00\",\"dateModified\":\"2021-03-06T17:04:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\"},\"description\":\"Como realizar un First Person Controller, movimiento del personaje y de la c\u00e1mara en primera persona con Unity. C\u00e1mara apuntando al cursor y saltos.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png\",\"width\":1000,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"First Person Controller en Unity\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.espai.es\/blog\/#website\",\"url\":\"https:\/\/www.espai.es\/blog\/\",\"name\":\"Blog Escola Espai\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.espai.es\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\",\"name\":\"David Roca\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g\",\"caption\":\"David Roca\"},\"description\":\"\u00a1Muy buenas a todos! Mi nombre es David, soy T\u00e9cnico en Animaci\u00f3n 3D, desarrollo de videojuegos y entornos interactivos. En mi carrera, me he especializado en la Realidad Aumentada, Realidad Virtual y la programaci\u00f3n en C#. Siempre me he decantado por la rama de programaci\u00f3n, y me he familiarizado por cuenta propia con distintos lenguajes de programaci\u00f3n. Mi hobby siempre ha sido analizar cada uno de los videojuegos que he tenido la ocasi\u00f3n de probar, y pensar en c\u00f3mo est\u00e1n hechos y programados. Desde que acab\u00e9 mis estudios he permanecido en el sector de la educaci\u00f3n, trabajando como profesor de programaci\u00f3n y como profesor de tiempo libre. Una de mis motivaciones, es la de poder transmitir esa energ\u00eda y esa ilusi\u00f3n por la programaci\u00f3n a los alumnos. Actualmente, estoy compaginando mi trabajo como profesor del \u00e1rea de programaci\u00f3n en la Escuela Espai, con un Grado Universitario de multimedia.\",\"url\":\"https:\/\/www.espai.es\/blog\/author\/davidroca\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"First Person Controller en Unity - Blog Escola Espai","description":"Como realizar un First Person Controller, movimiento del personaje y de la c\u00e1mara en primera persona con Unity. C\u00e1mara apuntando al cursor y saltos.","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:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/","og_locale":"es_ES","og_type":"article","og_title":"First Person Controller en Unity - Blog Escola Espai","og_description":"Como realizar un First Person Controller, movimiento del personaje y de la c\u00e1mara en primera persona con Unity. C\u00e1mara apuntando al cursor y saltos.","og_url":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/","og_site_name":"Blog Escola Espai","article_published_time":"2021-01-27T18:51:57+00:00","article_modified_time":"2021-03-06T17:04:36+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png","type":"image\/png"}],"author":"David Roca","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"David Roca","Tiempo de lectura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/"},"author":{"name":"David Roca","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a"},"headline":"First Person Controller en Unity","datePublished":"2021-01-27T18:51:57+00:00","dateModified":"2021-03-06T17:04:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/"},"wordCount":1216,"commentCount":13,"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png","keywords":["3d","c#sharp","camara","Escola Espai","primera persona","programaci\u00f3n","tutorial","unity"],"articleSection":["Escola Espai","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/","url":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/","name":"First Person Controller en Unity - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png","datePublished":"2021-01-27T18:51:57+00:00","dateModified":"2021-03-06T17:04:36+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a"},"description":"Como realizar un First Person Controller, movimiento del personaje y de la c\u00e1mara en primera persona con Unity. C\u00e1mara apuntando al cursor y saltos.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png","width":1000,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"First Person Controller en Unity"}]},{"@type":"WebSite","@id":"https:\/\/www.espai.es\/blog\/#website","url":"https:\/\/www.espai.es\/blog\/","name":"Blog Escola Espai","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.espai.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a","name":"David Roca","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g","caption":"David Roca"},"description":"\u00a1Muy buenas a todos! Mi nombre es David, soy T\u00e9cnico en Animaci\u00f3n 3D, desarrollo de videojuegos y entornos interactivos. En mi carrera, me he especializado en la Realidad Aumentada, Realidad Virtual y la programaci\u00f3n en C#. Siempre me he decantado por la rama de programaci\u00f3n, y me he familiarizado por cuenta propia con distintos lenguajes de programaci\u00f3n. Mi hobby siempre ha sido analizar cada uno de los videojuegos que he tenido la ocasi\u00f3n de probar, y pensar en c\u00f3mo est\u00e1n hechos y programados. Desde que acab\u00e9 mis estudios he permanecido en el sector de la educaci\u00f3n, trabajando como profesor de programaci\u00f3n y como profesor de tiempo libre. Una de mis motivaciones, es la de poder transmitir esa energ\u00eda y esa ilusi\u00f3n por la programaci\u00f3n a los alumnos. Actualmente, estoy compaginando mi trabajo como profesor del \u00e1rea de programaci\u00f3n en la Escuela Espai, con un Grado Universitario de multimedia.","url":"https:\/\/www.espai.es\/blog\/author\/davidroca\/"}]}},"jetpack_featured_media_url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/01\/Imagen.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/11132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/comments?post=11132"}],"version-history":[{"count":28,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/11132\/revisions"}],"predecessor-version":[{"id":11204,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/11132\/revisions\/11204"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/11208"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=11132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=11132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=11132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}