{"id":11299,"date":"2021-03-03T19:21:21","date_gmt":"2021-03-03T17:21:21","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=11299"},"modified":"2021-03-06T19:02:14","modified_gmt":"2021-03-06T17:02:14","slug":"third-person-controller-unity","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/","title":{"rendered":"Third Person Controller en Unity"},"content":{"rendered":"<h2><strong>Third Person Controller<\/strong><\/h2>\n<p style=\"text-align: justify;\">En este post aprenderemos a crear un<strong> Third Person Controller con Unity<\/strong>, desde cero.<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Para realizar nuestro Controlador en tercera persona necesitaremos el <a href=\"https:\/\/unity.com\/es\/unity\/features\/editor\/art-and-design\/cinemachine\">Cinemachine<\/a>. Este <strong>Package de Unity<\/strong> nos ofrece la soluci\u00f3n para crear el movimiento interactivo de la c\u00e1mara. Nos facilita mucho la creaci\u00f3n del comportamiento avanzado de la c\u00e1mara sin escribir c\u00f3digo. Para instalar el package, nos dirigimos a la pesta\u00f1a <strong>Window\/Package Manager <\/strong>y buscamos Cinemachine.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachine.png\" rel=\"attachment wp-att-11314\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11314 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachine.png\" alt=\"\" width=\"971\" height=\"650\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachine.png 971w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachine-300x201.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachine-768x514.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachine-700x469.png 700w\" sizes=\"auto, (max-width: 971px) 100vw, 971px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Primero de todo vamos a crear nuestro jugador, nuestro player ser\u00e1 una c\u00e1psula y tendr\u00e1 como hijo un cubo para marcar la direcci\u00f3n y estar\u00e1 dentro de un Empty GameObject. Les quitaremos todas las colisiones.\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Player.png\" rel=\"attachment wp-att-11327\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11327 \" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Player.png\" alt=\"\" width=\"429\" height=\"306\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Player.png 715w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Player-300x214.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Player-700x499.png 700w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\"><b>Configuraci\u00f3n de Cinemachine<\/b><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Seguimos creando desde Cinemachine la c\u00e1mara que usaremos, <strong>\u201cFree Look\u201d<\/strong>. Al crear este objeto nos podemos fijar que ha aparecido un icono en nuestra c\u00e1mara.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FreeLookCam.png\" rel=\"attachment wp-att-11318\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-11318\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FreeLookCam-263x300.png\" alt=\"\" width=\"263\" height=\"300\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FreeLookCam-263x300.png 263w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FreeLookCam.png 409w\" sizes=\"auto, (max-width: 263px) 100vw, 263px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Lo que har\u00e1 el <strong>\u00abCM FreeLook\u00bb<\/strong> es ordenar a nuestra Main Camera todas las opciones por donde se puede mover. Al inicio del componente veremos dos apartados y asignaremos el Player al\u00a0Follow y al Look At.<\/span><span style=\"font-weight: 400;\"> Como podemos ver en nuestra escena, nuestra c\u00e1mara sigue a nuestro player y apunta hacia \u00e9l.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FollowLookAt.png\" rel=\"attachment wp-att-11317\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-11317\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FollowLookAt-300x266.png\" alt=\"\" width=\"300\" height=\"266\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FollowLookAt-300x266.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/FollowLookAt.png 459w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Para modificar desde nuestra c\u00e1mara el comportamiento debemos ir al apartado de Orbits. Si no fijamos en nuestra escena podemos ver 3 \u00f3rbitas distintas: <strong>Top, Middle, Bottom<\/strong>. Nuestra c\u00e1mara se mover\u00e1 por estas 3 \u00f3rbitas dependiendo de donde este nuestro Mouse.\u00a0<\/span><span style=\"font-weight: 400;\">Subiremos la velocidad del rat\u00f3n y cambiaremos el \u00abBinding Mode\u00bb a World Space.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Orbits.png\" rel=\"attachment wp-att-11326\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11326 \" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Orbits-e1614703948944.png\" alt=\"\" width=\"976\" height=\"493\" \/><\/a><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-11331 size-full alignnone\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ValoresOrbits.png\" alt=\"\" width=\"460\" height=\"133\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ValoresOrbits.png 460w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ValoresOrbits-300x87.png 300w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/p>\n<p style=\"text-align: justify;\">Ajustaremos la altura y el radio de las \u00f3rbitas a nuestro gusto.<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Vamos a a\u00f1adir a nuestro ThirdPersonController un CharacterController para darle movimiento al Player. Y creamos el script para el movimiento.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCScript.png\" rel=\"attachment wp-att-11313\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11313\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCScript.png\" alt=\"\" width=\"497\" height=\"490\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCScript.png 497w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCScript-300x296.png 300w\" sizes=\"auto, (max-width: 497px) 100vw, 497px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\"><strong>PlayerMovement.cs<\/strong><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Para explicar el movimiento debemos conocer el\u00a0<\/span><b>GetAxis(\u201cHorizontal\u201d)<\/b><span style=\"font-weight: 400;\">\u00a0y el<\/span><b>\u00a0GetAxis (\u201cVertical\u201d)<\/b><span style=\"font-weight: 400;\">\u00a0detectan cuando estamos pulsando A, D y flecha izquierda y derecha para GetAxis(\u201cHorizontal\u201d), devolvi\u00e9ndonos un -1 para la izquierda y un +1 para la derecha. Y W y S y las flechitas del teclado de arriba y abajo para el GetAxis(\u201cVertical\u201d), tambi\u00e9n devolviendo un -1 y un +1.\u00a0<\/span><span style=\"font-weight: 400;\">Una vez sabemos esto vamos a crear dos variables para la X y la Z en el <strong>Update<\/strong>.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Inputs.png\" rel=\"attachment wp-att-11322\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11322 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Inputs.png\" alt=\"\" width=\"451\" height=\"55\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Inputs.png 451w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Inputs-300x37.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">A continuaci\u00f3n a\u00f1adiremos la direcci\u00f3n, declararemos un Vector3 llamado direcci\u00f3n que coger\u00e1 los valores antes creados. Para no movernos m\u00e1s r\u00e1pido pulsando las dos teclas a la vez, normalizaremos el Vector.\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Direction.png\" rel=\"attachment wp-att-11316\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11316 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Direction.png\" alt=\"\" width=\"599\" height=\"35\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Direction.png 599w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Direction-300x18.png 300w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">A continuaci\u00f3n, vamos a generar dos variables, para el Character Controller y para la velocidad, asign\u00e1ndola en el Start.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCStart.png\" rel=\"attachment wp-att-11339\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-11333 alignleft\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariableCC.png\" alt=\"\" width=\"267\" height=\"47\" \/><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-11339 alignleft\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCStart.png\" alt=\"\" width=\"249\" height=\"53\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCStart.png 400w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CCStart-300x64.png 300w\" sizes=\"auto, (max-width: 249px) 100vw, 249px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Vamos a escribir una condici\u00f3n, para que nos detecte el movimiento, es decir, cuando estemos pulsando una tecla del GetAxis. Escribiendo si el valor del Vector es mayor de 0.1, ya que cuando no pulsamos siempre ser\u00e1 0. Y a\u00f1adimos el movimiento con el CharacterController antes declarado.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/MagnitudIf.png\" rel=\"attachment wp-att-11340\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11340\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/MagnitudIf.png\" alt=\"\" width=\"432\" height=\"94\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/MagnitudIf.png 432w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/MagnitudIf-300x65.png 300w\" sizes=\"auto, (max-width: 432px) 100vw, 432px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Como podemos ver con este c\u00f3digo nuestro personaje ya se mueve, pero no respeta hacia donde estamos mirando. Para corregir esto primero de todo necesitamos saber cuanto deber\u00e1 rotar nuestro personaje en el eje Y cogiendo la direcci\u00f3n, crearemos un float que ser\u00e1 el \u00e1ngulo hacia donde apunta dentro de la condici\u00f3n. Usando una funci\u00f3n de la clase Mathf, llamada <strong>Atan2<\/strong> nos devuelve el \u00e1ngulo entre el eje X empezando desde 0 y terminando en x, y, y nos devuelve el float en radiantes as\u00ed que lo pasaremos a grados tambi\u00e9n.\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\"> A continuaci\u00f3n sumaremos este \u00e1ngulo a la rotaci\u00f3n de la c\u00e1mara (todo dentro de la condici\u00f3n).\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/targetAngle.png\" rel=\"attachment wp-att-11330\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11330\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/targetAngle.png\" alt=\"\" width=\"837\" height=\"56\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/targetAngle.png 837w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/targetAngle-300x20.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/targetAngle-768x51.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/targetAngle-700x47.png 700w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Atan2.png\" rel=\"attachment wp-att-11311\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-11311\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Atan2.png\" alt=\"\" width=\"438\" height=\"377\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Atan2.png 661w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Atan2-300x258.png 300w\" sizes=\"auto, (max-width: 438px) 100vw, 438px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Si comprobamos el movimiento de nuestro jugador ya apunta hacia la direcci\u00f3n de la c\u00e1mara, pero lo hace de forma brusca, as\u00ed que vamos a suavizar esta rotaci\u00f3n.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Crearemos 3 variables para suavizar:\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesSmooth.png\" rel=\"attachment wp-att-11336\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11336\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesSmooth.png\" alt=\"\" width=\"322\" height=\"89\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesSmooth.png 322w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesSmooth-300x83.png 300w\" sizes=\"auto, (max-width: 322px) 100vw, 322px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Usaremos una funciona matem\u00e1tica de Mathf llamada <strong>SmoothDampAngle<\/strong> que nos pide:<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/SmoothDampAngle.png\" rel=\"attachment wp-att-11329\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11329\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/SmoothDampAngle.png\" alt=\"\" width=\"1001\" height=\"118\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/SmoothDampAngle.png 1001w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/SmoothDampAngle-300x35.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/SmoothDampAngle-768x91.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/SmoothDampAngle-1000x118.png 1000w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/SmoothDampAngle-700x83.png 700w\" sizes=\"auto, (max-width: 1001px) 100vw, 1001px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Nuestro personaje ya rota de la manera correcta as\u00ed que ahora solo falta que avance hacia esa direcci\u00f3n. Crearemos un Vector3 llamado moveDir y debemos pasar una rotaci\u00f3n a Vector3, para hacer esto simplemente multiplicamos por Vector3.forward.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/moveDir.png\" rel=\"attachment wp-att-11324\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11324\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/moveDir.png\" alt=\"\" width=\"633\" height=\"52\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/moveDir.png 633w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/moveDir-300x25.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Con el script ya terminado comprobamos el movimiento y vemos que funciona todo perfectamente. En este punto nuestro personaje ya se mover\u00e1 correctamente y con completa libertad, solo falta a\u00f1adir la gravedad, ya que hemos desarrollado el player con CharacterController y no con rigidBody.\u00a0Vamos al script del player y a\u00f1adiremos dos nuevas variables:<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGravity.png\" rel=\"attachment wp-att-11334\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11334\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGravity.png\" alt=\"\" width=\"341\" height=\"53\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGravity.png 341w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGravity-300x47.png 300w\" sizes=\"auto, (max-width: 341px) 100vw, 341px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Vamos a escribir en el <strong>U<\/strong><\/span><b>pdate<\/b><span style=\"font-weight: 400;\">\u00a0que la velocidad en Y, es decir la direcci\u00f3n de Y, es igual a esta velocidad multiplicada por la gravedad por el tiempo. Y se lo a\u00f1adiremos al Character Controller como hemos hecho antes, pero multiplicando otra vez por el tiempo, ya que la gravedad se multiplica por tiempo al cuadrado.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Gravedad.png\" rel=\"attachment wp-att-11320\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11320\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Gravedad.png\" alt=\"\" width=\"440\" height=\"65\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Gravedad.png 440w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Gravedad-300x44.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">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. Para corregir este problema, necesitaremos comprobar el suelo. Para comprobar que estamos tocando el suelo crearemos un objeto empty en los pies del jugador.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/GroundCheck2.png\" rel=\"attachment wp-att-11341\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11341\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/GroundCheck2.png\" alt=\"\" width=\"228\" height=\"51\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">En este punto generaremos una peque\u00f1a esfera que nos detectara si el objeto con el cual colisiona tiene una LayerMask determinada. Vamos a verlo a continuaci\u00f3n, crearemos 4 variables.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGround.png\" rel=\"attachment wp-att-11335\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11335\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGround.png\" alt=\"\" width=\"386\" height=\"103\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGround.png 386w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/VariablesGround-300x80.png 300w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/a><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">En el Update haremos la l\u00ednea para que nos detecte capa si la esfera la colisiona y nos cambie el valor de la booleana a true. Si la esfera collisiona con la Capa \u201cfloorMask\u201d y la velocidad en Y es negativa, le pondremos el valor de Y a -2 (puede variar dependiendo de nuestro player).<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/isGrounded.png\" rel=\"attachment wp-att-11323\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11323\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/isGrounded.png\" alt=\"\" width=\"901\" height=\"47\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/isGrounded.png 901w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/isGrounded-300x16.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/isGrounded-768x40.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/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\/03\/NormalizarGravedad.png\" rel=\"attachment wp-att-11325\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11325\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/NormalizarGravedad.png\" alt=\"\" width=\"300\" height=\"103\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Para crear y a\u00f1adir la capa debemos dirigirnos al inspector de Unity en\u00a0<\/span><b>Layer\/Default\/Add Layer,<\/b><span style=\"font-weight: 400;\">\u00a0a\u00f1adimos la nueva capa y se la seleccionamos a todos los objetos de nuestra escena.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/AddLayer.png\" rel=\"attachment wp-att-11310\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11310\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/AddLayer.png\" alt=\"\" width=\"505\" height=\"230\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/AddLayer.png 505w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/AddLayer-300x137.png 300w\" sizes=\"auto, (max-width: 505px) 100vw, 505px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\"><b>Salto<\/b><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Ahora ya solo nos quedar\u00eda a\u00f1adir el\u00a0<\/span><b>salto<\/b><span style=\"font-weight: 400;\">\u00a0a nuestro movimiento.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">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.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\"> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11328\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Salto.png\" alt=\"\" width=\"522\" height=\"116\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Salto.png 522w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/Salto-300x67.png 300w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/>\u00a0\u00a0<a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/funcionSalto.jpg\" rel=\"attachment wp-att-11319\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11319\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/funcionSalto.jpg\" alt=\"\" width=\"300\" height=\"151\" \/><\/a><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Una vez aplicada la gravedad y el salto, si nos fijamos cuando pasamos por delante de un objeto, la c\u00e1mara se posiciona dentro de este. Para corregir este error, Cinemachine nos da herramientas para detectar las colisiones y as\u00ed ajustar la c\u00e1mara. En este caso vamos a la opci\u00f3n de <strong>Add Extensi\u00f3n<\/strong> y a\u00f1adimos <strong>CinemachineCollider<\/strong>.<\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachineCollider.png\" rel=\"attachment wp-att-11315\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-11315\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachineCollider.png\" alt=\"\" width=\"483\" height=\"284\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachineCollider.png 483w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/CineMachineCollider-300x176.png 300w\" sizes=\"auto, (max-width: 483px) 100vw, 483px\" \/><\/a><\/p>\n<p>Ya tenemos nuestro <strong>Third Person Controller<\/strong> completo, quedar\u00eda algo as\u00ed:<\/p>\n<pre class=\"theme:monokai line-height:20 float-enable:true lang:c# decode:true\" title=\"MovementController\">public class PlayerMovement: MonoBehaviour\r\n{\r\n    public CharacterController cc;\r\n    private float speed = 12f;\r\n\r\n    public float Gravity = -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\r\n    public float turnSmoothTime = 0.1f;\r\n    float turnSmoothVelocity;\r\n\r\n    public Transform cam;\r\n\r\n    private void Start()\r\n    {\r\n        cc = GetComponent&lt;CharacterController&gt;();\r\n    }\r\n    void Update()\r\n    {\r\n        \/\/Movimiento\r\n        float horizontal = Input.GetAxisRaw(\"Horizontal\");\r\n        float vertical = Input.GetAxisRaw(\"Vertical\");\r\n\r\n        Vector3 direction = new Vector3(horizontal, 0, vertical).normalized;\r\n\r\n        if (direction.magnitude &gt;= 0.1f)\r\n        {\r\n            float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + cam.eulerAngles.y;\r\n            float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);\r\n\r\n            transform.rotation = Quaternion.Euler(0, angle, 0);\r\n\r\n            Vector3 moveDir = Quaternion.Euler(0, targetAngle, 0) * Vector3.forward;\r\n            cc.Move(moveDir.normalized * speed * Time.deltaTime);\r\n        }\r\n\r\n        \/\/Detecci\u00f3n de suelo\r\n        isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, floorMask);\r\n        \/\/Gravedad\r\n        velocity.y += Gravity * Time.deltaTime;\r\n        if (isGrounded &amp;&amp; velocity.y &lt; 0)\r\n        {\r\n            velocity.y = -1.86f;\r\n        }\r\n        cc.Move(velocity * Time.deltaTime);\r\n        \/\/Salto\r\n        if (Input.GetButtonDown(\"Jump\") &amp;&amp; isGrounded)\r\n        {\r\n            velocity.y = Mathf.Sqrt(3 * -2 * Gravity);\r\n        }\r\n\r\n    }\r\n    \r\n}<\/pre>\n<p>Si os ha sido de utilidad el <strong>Third Person Controller<\/strong>, pod\u00e9is echar un vistazo al\u00a0<strong>First Person Controller <\/strong>pulsando\u00a0<a href=\"https:\/\/www.espai.es\/blog\/2021\/01\/first-person-controller-unity\/\">aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este post aprenderemos a crear un Third Person Controller con Unity, desde cero. Para realizar nuestro Controlador en tercera persona necesitaremos el Cinemachine. <\/p>\n","protected":false},"author":37,"featured_media":11347,"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":[528,37,322,413],"class_list":["post-11299","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-escola-espai","category-programacion","tag-escola-espai","tag-tutorial","tag-unity","tag-unity3d"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Third Person Controller en Unity - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"Como realizar un Third Person Controller, movimiento del personaje y configuraci\u00f3n del Cinemachine en Unity. Gravedad, saltos y \u00f3rbitas de la c\u00e1mara.\" \/>\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\/03\/third-person-controller-unity\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Third Person Controller en Unity - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"Como realizar un Third Person Controller, movimiento del personaje y configuraci\u00f3n del Cinemachine en Unity. Gravedad, saltos y \u00f3rbitas de la c\u00e1mara.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-03T17:21:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-06T17:02:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1919\" \/>\n\t<meta property=\"og:image:height\" content=\"907\" \/>\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=\"6 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\/03\/third-person-controller-unity\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/\"},\"author\":{\"name\":\"David Roca\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\"},\"headline\":\"Third Person Controller en Unity\",\"datePublished\":\"2021-03-03T17:21:21+00:00\",\"dateModified\":\"2021-03-06T17:02:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/\"},\"wordCount\":1141,\"commentCount\":3,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png\",\"keywords\":[\"Escola Espai\",\"tutorial\",\"unity\",\"unity3D\"],\"articleSection\":[\"Escola Espai\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/\",\"name\":\"Third Person Controller en Unity - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png\",\"datePublished\":\"2021-03-03T17:21:21+00:00\",\"dateModified\":\"2021-03-06T17:02:14+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\"},\"description\":\"Como realizar un Third Person Controller, movimiento del personaje y configuraci\u00f3n del Cinemachine en Unity. Gravedad, saltos y \u00f3rbitas de la c\u00e1mara.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png\",\"width\":1919,\"height\":907},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Third 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":"Third Person Controller en Unity - Blog Escola Espai","description":"Como realizar un Third Person Controller, movimiento del personaje y configuraci\u00f3n del Cinemachine en Unity. Gravedad, saltos y \u00f3rbitas de la c\u00e1mara.","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\/03\/third-person-controller-unity\/","og_locale":"es_ES","og_type":"article","og_title":"Third Person Controller en Unity - Blog Escola Espai","og_description":"Como realizar un Third Person Controller, movimiento del personaje y configuraci\u00f3n del Cinemachine en Unity. Gravedad, saltos y \u00f3rbitas de la c\u00e1mara.","og_url":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/","og_site_name":"Blog Escola Espai","article_published_time":"2021-03-03T17:21:21+00:00","article_modified_time":"2021-03-06T17:02:14+00:00","og_image":[{"width":1919,"height":907,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png","type":"image\/png"}],"author":"David Roca","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"David Roca","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/"},"author":{"name":"David Roca","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a"},"headline":"Third Person Controller en Unity","datePublished":"2021-03-03T17:21:21+00:00","dateModified":"2021-03-06T17:02:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/"},"wordCount":1141,"commentCount":3,"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png","keywords":["Escola Espai","tutorial","unity","unity3D"],"articleSection":["Escola Espai","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/","url":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/","name":"Third Person Controller en Unity - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png","datePublished":"2021-03-03T17:21:21+00:00","dateModified":"2021-03-06T17:02:14+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a"},"description":"Como realizar un Third Person Controller, movimiento del personaje y configuraci\u00f3n del Cinemachine en Unity. Gravedad, saltos y \u00f3rbitas de la c\u00e1mara.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/03\/ImagenPortada.png","width":1919,"height":907},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2021\/03\/third-person-controller-unity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"Third 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\/03\/ImagenPortada.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/11299","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=11299"}],"version-history":[{"count":25,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/11299\/revisions"}],"predecessor-version":[{"id":11368,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/11299\/revisions\/11368"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/11347"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=11299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=11299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=11299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}