post

En este tutorial vamos a explicar cómo crear un sencillo controlador táctil para dispositivos móviles haciendo uso del nuevo sistema UI nativo de Unity, disponible desde su versión 4.6 y que ha supuesto un gran avance respecto a su anterior sistema de creación de interfaces de usuario.

Hasta ahora, con el anterior sistema, resultaba bastante tediosa la creación de elementos de tipo UI, así como su manejo y adaptación a las diferentes resoluciones de pantalla (casi todo mediante scripting), llegando al punto de que muchos desarrolladores optaban por la opción de usar herramientas de terceros que estaban mucho mejor preparadas. Sin embargo veremos que con el nuevo sistema nativo que han desarrollado, la creación de interfaces gráficas se ha simplificado a una manera intuitiva e increíblemente sencilla… ¡un 10 para los desarrolladores de Unity! 🙂

Creación del objeto de tipo ‘Canvas’

Uno de los principales elementos que incorpora el nuevo sistema UI es el Canvas‘. Se trata de un contenedor dentro del cual incluiremos todos los objetos de tipo UI que queramos que aparezcan en nuestra pantalla (botones, texos, imágenes…). Una gran ventaja que tiene el uso de canvas es que automáticamente es capaz de adaptarnos la escala y la posición de todos sus elementos UI a la resolución de pantalla de nuestro juego. Veamos cómo crearlo:

Lo primero que haremos será crear un objeto de tipo ‘Canvas‘ en la jerarquía de objetos de nuestra escena. Para ello, dentro del menú desplegable “Create” de la sección “Hierarchy“, encontraremos una sección llamada “UI” y dentro de ella diferentes elementos, seleccionamos “Canvas” y lo renombramos por ejemplo a “GUIControladorTactil“.

Crear un objeto de tipo ‘Canvas’

Veremos que en nuestra escena se ha creado una zona rectangular que corresponde a nuestro canvas y que contiene una serie de propiedades configurables. Observaremos que no se trata de un GameObject común ya que no cuenta con un componente de tipo ‘Transform‘ y por lo tanto carece de escala y posición. No nos preocupemos. También veremos que, aparte del objeto de tipo canvas, en nuestra jerarquía se habrá creado un objeto llamado “EventSystem“. De él sólamente decir que se trata de un objeto que siempre deberá existir cuando estemos haciendo uso de elementos de tipo UI en nuestra escena, ya que es el que se encarga de gestionarlos internamente.

Objeto ‘Canvas’

Creación de los botones UI que formarán el controlador táctil

Una vez tenemos nuestro canvas creado, vamos a crear los diferentes botones que formarán nuestro controlador.

* Para este tutorial construiremos un controlador sencillo (cuatro botones para la cruceta y otros dos botones de acción), por lo que se deja al criterio del desarrollador construir su propio ccontrolador en función de sus necesidades.

Para ello seleccionaremos en la jerarquía nuestro objeto “GUIControladorTactil y, al igual que antes, nos iremos al menú “Create” -> “UI”  pero ahora seleccionaremos el elemento “Button“. A continuación veremos que se nos ha añadido un botón dentro de nuestro canvas con las siguientes propiedades:

Propiedades de un UI Button

* Observemos que al crear el objeto de tipo button, dentro de éste se ha añadido automáticamente, como objeto hijo, otro objeto llamado “Text“. Como en este tutorial vamos a hacer uso de imágenes para representar a cada uno de los botones, vamos a eliminar ese objeto ya que no nos será necesario.

Entre las propiedades de este objeto “Button” observamos que, a diferencia del objeto canvas, este ya sí que cuenta con un componente “Rect Transform” en el que podemos configurar su posición dentro del canvas, su escala, rotación, etc. También vemos que tiene otros componentes como “Canvas Renderer“, “Image” y “Button“, todos ellos configurables para darle a nuestro botón el aspecto y el comportamiento que deseemos.

En este caso vamos a configurarlo para que el aspecto del botón sea directamente una imagen (.png) seleccionada por nosotros y además añadiremos un pequeño efecto visual para cuando pulsemos y despulsemos el botón. Ni que decir tiene que queda a libre elección del desarrollador el configurar el aspecto del botón como desee.

* Más abajo ponemos a disposición del lector las imágenes usadas en este tutorial para ser descargadas.

En la siguiente imagen se indica, señalado en amarillo, las propiedades que hemos cambiado para este ejemplo:

Configuración del botón

Con esto lo que hemos hecho ha sido:

  • Ponerle un nombre descriptivo a nuestro botón.
  • Width / Height: Especificarle una anchura y una altura específica.
  • Source Image: Indicarle la imagen que queremos que cargue.
  • Transition -> Normal Color: Indicarle que cuando el botón esté en estado de reposo le aplique un poco de transparencia alfa.
  • Transition -> Highlighted Color: Indicarle que cuando pasemos por encima del botón (con el dedo o con el ratón) le siga aplicando la misma transparencia alfa.
  • Transition -> Pressed Color: Indicarle que cuando pulsemos el botón (con el dedo o con el ratón) elimine su transparencia y se convierta en color sólido.

Una vez hecho esto, creamos el resto de botones (btnIzqda, btnArriba, btnAbajo, btnAction1 y btnAction2) exactamente igual que hemos hecho con “btnDcha” y los colocamos a nuestro gusto dentro del canvas, de tal manera que quede algo como esto:

Disposición de los botones dentro del canvas

* A continuación dejamos las imágenes usadas en este tutorial para quien quiera usarlas. Pincha en ellas para descargalas:

Bien pues, una vez conseguido construir el aspecto de nuestro controlador, pulsamos PLAY para ejecutar nuestra escena, veremos que salen en pantalla nuestros botones y que al pulsarlos hacen el efecto de ponerse más oscuros, justo como queríamos. Observemos que la posición y el tamaño de los elementos UI es justo el que le hemos indicado en sus propiedades, sin embargo, si probamos a cambiar la resolución de la pantalla observamos que los botones se quedan estáticos en cuanto a posición y tamaño. Esto sería un problema ya que suponemos que nuestro juego podrá lanzarse en diferentes resoluciones y por tanto querremos que los botones se adapten a ellas. No tendría sentido que con una resolución pequeña los botones se vieran a un determinado tamaño y en una resolución el doble de grande se sigan viendo igual que en la resolución más baja.

Para solucionar esto es tan simple como irnos a las propiedades de nuestro canvas y, en su componente “Canvas Scaler“, seleccionamos UI Scale Mode -> Scale With Screen Size. Esto, automáticamente, hará que todo el contenido de nuestro canvas se reescale según el tamaño de nuestra pantalla, ¡así de sencillo! 🙂

Cambiamos la propiedad UI Scale Mode para que el canvas se auto-reajuste

Cambiamos la propiedad UI Scale Mode para que el canvas se auto-reajuste

Creación de eventos

Ya tenemos terminado lo que será el aspecto visual de nuestro controlador táctil, pero aún nos falta lo más importante, que es darle funcionalidad.

Para ello, el nuevo sistema UI de Unity pone a nuestra disposición un componente llamado “Event Trigger“, con el que seremos capaces de indicarle a cualquiera de nuestros elementos UI que respondan ante cualquier evento sobre ellos como por ejemplo podría ser la acción de ser presionados, ser arrastrados, pasar por encima con el dedo o ratón, etc.

Empecemos por irnos a las propiedades de uno de nuestros botones y, a través del botón “Add Component“, añadamos el componente “Event Trigger“.

Añadir el componente ‘Event Trigger’ a cada botón

Ahora pinchamos sobre el botón “Add New Event Type” del nuevo componente que hemos añadido y nos saldrá un listado con todos los eventos que soporta un elemento UI. Dichos eventos responderán a diferentes acciones que realicemos sobre el botón al que se lo apliquemos.

Lista de eventos UI

En nuestro caso vamos a añadir estos cuatro eventos:

  • Pointer Down: Será el correspondiente a cuando pulsemos el botón con el dedo (o ratón).
  • Pointer Up: Será el correspondiente a cuando dejemos de pulsar el botón con el dedo (o ratón).
  • Pointer Enter: Será el correspondiente a cuando arrastremos el dedo (o ratón) desde fuera del botón a dentro de él.
  • Pointer Exit: Será el correspondiente a cuando arrastremos el dedo (o ratón) desde dentro del botón hacia fuera de él.

Añadimos los cuatro eventos dentro del componente ‘Event Trigger’

* Aquí el lector podría preguntarse: “¿por qué necesitamos los cuatro eventos si con sólo dos de ellos (‘Pointer Down’ y ‘Pointer Up’) sería suficiente para recoger las pulsaciones en nuestro controlador?”. Pues en teoría tendría razón, pero en este tutorial recomendamos contemplar también los dos eventos de ‘Pointer Enter’ y ‘Pointer Exit’ para mejorar la experiencia en una pantalla táctil. Controlar los cuatro eventos nos permitirá poder pulsar los botones tanto de manera puntual (clickeando) como arrastrando el dedo, sin levantarlo, hasta ellos.

Haremos exactamente lo mismo para el resto de botones de nuestro controlador.

Como vemos, hemos dejado nuestros botones listos para configurar los comportamientos que queramos que ocurran cada vez que se dé cualquiera de esos cuatro eventos sobre ellos, pero esto aún no lo vamos a hacer, ya que antes vamos crear el script que se encargará de realizar los comportamientos necesarios.

Creación del script ‘ControlarObjeto.cs’

El objetivo de este tutorial no es centrarnos en la implementación de los scripts que realizarán las acciones de los botones (ya que cada desarrollador los implementarán de un modo u otro en función de las necesidades de su juego) si no de mostrar cómo asociar dichos scripts a nuestro sistema de UI y, por tanto, a modo de ejemplo, vamos a crear un script sencillo que sea capaz de realizar tan solo las siguientes acciones:

  • Mover un objeto en el eje X y en el eje Y.
  • Aumentar o disminuir al escala de dicho objeto.

Una vez tenemos creado nuestro script, se lo asociamos al objeto de nuestra escena el cual querremos controlar mediante nuestro controlador táctil. En este caso hemos creado un simple cubo y le hemos añadido como componente nuestro script.

Asignaremos nuestro script al objeto de tipo cubo

Una vez hecho esto, ya tenemos todo preparado para volver a nuestro sistema UI y configurar sus eventos para que realice las diferentes acciones.

Configuración de las acciones en los eventos

Ya solo nos queda configurar cada uno de los eventos que añadimos anteriormente en el “Event Trigger” de cada botón de nuestro controlador táctil. Para ello seleccionamos uno de los botones, por ejemplo “btnDcha“, y configuramos su “Event Trigger” del siguiente modo:

Configuración del componente ‘Event Trigger’ del botón ‘btnDcha’

Como vemos, dentro de cada uno de los eventos, hay tres campos configurables:

  • El primer desplegable siempre lo dejaremos con el valor ‘Runtime Only‘.
  • En el campo de más abajo deberemos arrastrar el objeto que contiene el script con las funciones públicas que se encargarán de realizar las acciones. En nuestro caso, obviamente, será nuestro cubo.
  • En el campo de la derecha, al desplegarlo, nos saldrá una lista de componentes, entre los cuales veremos que aparece el nombre de nuestro script “ControlarObjeto“. Si lo seleccionamos se nos desplegará otra sub-lista con todas las funciones públicas que contiene nuestro script que son justamente las que necesitamos.

Observemos que la lista de componentes a elegir en la lista de acciones de la derecha va a depender siempre del objeto que asignemos en el campo de abajo a la izquierda.

Si ahora ejecutamos nuestro juego veremos que al colocar el dedo (o ratón) encima del botón derecho de la cruceta, el cubo comenzará a moverse y, si dejamos de pulsar, éste se detiene.

¡Así de sencillo es! Ahora sólo nos queda configurar, al igual que hemos hecho con este botón, los eventos del resto de botones de la cruceta. Los pasos a seguir serán exactamente los mismos que para el botón “btnDcha” pero teniendo en cuenta que en los eventos “Pointer Down” y “Pointer Enter“, en vez de asignarle la función MoverDerecha() de nuestro script, le asignaremos la correspondiente a cada botón.

Y por último, para los eventos de los botones de acción 1 y 2, le asignaremos las funciones correspondientes a aumentar o disminuir escala, veamos el ejemplo con el botón “btnAction1“:

Configuración del componente ‘Event Trigger’ del botón ‘btnAction1’

¡Y eso es todo! Con estos sencillos pasos tendremos un sistema UI (en nuestro caso usado para construirnos un controlador táctil simple) que será totalmante autoadaptable a todo tipo de resoluciones y que funcionará en cualquier dispositivo móvil.

Resultado final

A partir de aquí, como siempre, queda a elección del lector el desarrollar el sistema que desee para sus necesidades concretas 😉

A continuación dejamos el link para descargar el código del proyecto utilizado en este tutorial:

DESCARGAR PROYECTO

* Para más info sobre el nuevo sistema UI de Unity, entra en su documentación oficial.

Acerca de Santi Andrade

Canturreo canciones, hago cosas raras de informáticos y amo las croquetas. Web & Unity Game Developer y miembro de la banda de rock ‘Histeria Innokua’.

histeriagamedev.wordpress.com |

Sígueme en Twitter

59 respuestas sobre “Unity: Controlador táctil para dispositivos móviles (Nuevo sistema UI)

      • Excelente post, Santi! Como siempre…

        Yo tengo una duda acerca de los botones.. la comparto por aqui por si ha alguien le ayuda.
        Tengo un script para abrir una puerta con una llave ( del modo mas simple pero bestia, si quereis lo comparto) Me explico, tengo colocado un cubo sin mesh delante de la puerta que impide ejecutar la funcion de abrir, al coger la llave, este cubo desaparece (mediante deactivate.trigger). Hasta aqui bien, el problema es que para abrir la puerta, debo pulsar una tecla “F”. En Pc funciona muy bien, pero no sé como hacer un boton que simule el pulsar “f”, ya que la idea es hacer el juego para moviles..

        Otra cosa que probé es desactivar lo de pulsar f, pero la puerta se abre y cierra continuamente al acercar el player a su collinder…

        Teneis alguna idea de como hacer el boton que simule pulsar una tecla? Y que sea leido en el juego?

        Mil gracias de antemano y saludos!
        Para antes de navidades quiero tener el juego listo, lo compartiré con vosotros!

        • Hola Daniel, gracias por tu comentario.
          Lo que dices de simular la pulsación de una tecla desde un móvil sería tan fácil como añadir un botón UI (como el que hago en el ejemplo de este post, por ejemplo) y asignarle a dicho botón la función que usas para la tecla F.
          No le veo mayor complicación… ¿o quizás no te estoy entendiendo bien?

  1. Muy buen artículo, muy bien explicado.
    Vuelvo a Unity despúes de un tiempo y me encuentro con varias mejoras. Ya quedo atrás el tiempo de hacer los controles touch con GuiTextures y scripts para escalar y posicionar los mismos.

    Saludos,

  2. Muy buen aporte si señor.
    Yo en mis proyectos no uso el event trigger, si no que simplemento lo hago con la función OnClick, pero para juegos con mas funciones está mejor usar tu método, sobre todo con botones con distinta función según el grado de presión.
    Un problema que encontré yo, es cuando el objeto que tenemos que instanciar y no está en escena, si arrastramos el prefab se bugea en ocasiones y pierde la referencia del objeto que contiene la clase.

    • Sí, la verdad es que el EventTrigger es bastante útil para contemplar más estados de pulsación, aparte del simple OnClick, en nuestra interfaz UI y, además, tenerlo todo agrupado en un mismo sitio.

      Respecto al problema que comentas de que a veces se pierden las referencias, nunca me ha ocurrido manejando específicamente objetos UI, pero sí que alguna vez Unity me ha hecho cosas raras en cuanto a referencias a scripts… así que te creo! 😀 Supongo que esos pequeños busgs los irán arreglando en futuras versiones.

      Muchas gracias por leer el artículo y me alegro que te haya gustado! 🙂
      Saludos!

  3. Hola segui los pasos y pude hacerlo, pero al pasarlo al celular para probarlo no me funciona y en el unity vi que sale un mensaje que dice Failed to get device caps
    Alguna idea de que pasa?

    • Hola Jesús! Por lo que me comentas, ese error no tiene nada que ver con el código en sí… He buscado por encima en Google y he visto que hay mucha gente a la que le pasa y puede que tenga que ver con el hecho de conectar Unity con un dispositivo móvil a través de USB. ¿Para qué dispositivo estás probando?, ¿Android?, ¿IOS? ¿Y cómo estás intentando probar el juego en el móvil? No sé cuál será tu caso en concreto, pero échale un ojo a los foros en internet a ver si alguien encontró la solución.

      Ya te digo que no es tema del código… Yo lo he probado en un móvil Android y funciona perfectamente.

      Suerte y espero que si encuentras la solución, nos lo comentes por aquí por si a alguien le ocurre lo mismo! 😉

      Gracias por seguir el post!
      Saludos!

  4. buenas buenisimo me re sirvio me venia rompiendo la cabeza mucho con esto ya . queria preguntar q evento utilizar para q realize una acciio mientras se mantiene presionado un boton.

  5. Buen día Santi Andrade. primero muchas gracias por compartir tus conocimientos, eres muy amable, discúlpame mi ignorancia soy nuevo con Unity, y no he podido poner la imagen en el que aspecto del botón sea directamente una imagen (.png), cuando le doy al Source Image solo me da opción de escoger unos sprite ya predeterminados pero no puedo examinar el equipo para poder buscar la imagen que quiero o cualquier .png también trato de arrastrar la imagen al Source Image pero tampoco la carga. te agradezco mucho tu ayuda y tu atención prestada

    • Hola Pablo, muchas gracias por leer el artículo. Es muy fácil lo de la imagen, para que puedas usar cualquier recurso de tu PC (imágenes, audios, etc) en Unity, tienes que añadirlo previamente a la librería de tu proyecto, es decir a la parte de “Project”. Por tanto lo único que tienes que hacer es arrastrar tu imagen desde la carpeta de tu PC hasta la carpeta que quieras dentro de ” Project” en Unity. Una vez hecho esto verás que ya sí te saldrá disponible para asignarla al botón 😉 Saludos!!

  6. Excelente. Gracias por compartir tus conocimientos.
    Tengo una duda: Como puedo hacer para que el botón quede en una posición fija?.
    Lo que pasa es que cuando le doy play en unity para correr la aplicación, el botón cambia de posición y cuando lo pruebo en mi android sale en otra posición en la pantalla.
    Hay alguna manera para que dicho boton permanesca siempre en un mismo lugar?.

  7. Buenisimo el tutorial explicas muy bien, te queria preguntar como harias para que al precionar una sola ves el boton se mueva constantemente yo ya lo intente y no se que hacer.

    • Muchas gracias Darwin 🙂 Lo que me preguntas tiene fácil solución: lo único que tendrías que hacer es NO configurar los Event Trigger “PointerUp” y “PointerExit” del botón donde quieras tener ese comportamiento, de manera que una vez que pulses el botón, llame a la función de moverse pero que al levantar el dedo no llame a ninguna función que lo detenga. En conclusión, tendrías tan sólo 2 Event Trigger configurados: el “PointerDown” y el “PointerEnter”. Espero que te sirva de ayuda!

      • Gracias me sirvio tu consejo, lo que hice borre la funcion detener y en las funciones de movimiento agregue los otros movimiento y los puse en false, mira que quiero que gire con respecto al movimiento que hace por ejemplo al presionar arriba que gire para arriba estoy poniendo esta linea de codigo pero igual no funciona me descontrola el movimiento
        this.transform.rotation=new Quaternion(0,0,270,0);
        te agradeceria muchisimo si me ayudas, ademas te iba a preguntar tienes algun canal en youtube para seguirte

        • Hola de nuevo Darwing, me alegro haberte servido de ayuda. Para la rotación yo te recomiendo que uses transform.Rotate() que es bastante sencillo. Aquí te dejo el link de su documentación donde puedes ver algún ejemplo de uso: http://docs.unity3d.com/ScriptReference/Transform.Rotate.html

          Es tan fácil como a la función Rotate() pasarle el eje sobre el que quieres rotar multiplicado por los ángulos que quieres rotar por frame.

          Saludos!

          • Que tal santi gracias por el consejo logre avanzar en mi juego pero me e topado con un problema haber si tu me puedes ayudar, la cosa es que quiero que al entrar a una zona se desactiven parte de mis botones de movimiento, bueno se supone que lo que estoy haciendo los desactivaria, logre hacer que en teoricamente lo desactive porque al correr el juego y chocar con el objeto se ponen en gris pero el problema es que igual al clickearlo siguen funcionando no se la verdad si sera por los eventos de los botones talves tengas alguna idea te dejo mi codigo:
            using UnityEngine;
            using System.Collections;
            using UnityEngine.UI;

            public class ActBtn_Arb_Abj : MonoBehaviour {
            private bool choque=false;
            public Transform btnDerecho;
            public Transform btnIzquierdo;
            public Transform btnArriba;
            public Transform btnAbajo;

            void OnTriggerEnter2D(Collider2D colision){

            if(!choque && colision.gameObject.tag==”Player”){
            Debug.Log (“colisiono”);
            choque = true;
            btnDerecho.GetComponent ().interactable = true;
            btnIzquierdo.GetComponent ().interactable = true;
            btnArriba.GetComponent ().interactable= false;
            btnAbajo.GetComponent ().interactable = false;

            }
            }

            }

    • Bueno otra opción sería, en vez de intentar deshabilitar la UI del botón, parar el movimiento a través de código. Por ejemplo, si lo que quieres es que tu personaje no avance cuando entres en tal zona, en el trigger donde detectas la entrada a dicha zona haz que, aunque le des al botón de avanzar, tu personaje se quede quieto. De esto modo no tienes que tocar nada de la UI y la lógica iría controlada por completo desde tu código.

  8. Hola como estas? me sirvio mucho tu tutorial, sera que podrias hacer un tuto de implementar palanca joystick,
    hay muchos por alli, pero la verdad quiero es aprender hacerlo yo mismo desde cero, se le agredece ^^,

  9. Tengo un problema, al implementar esto, no funcionan los colliders, no choca con nada, a menos que sea un rigidbody, alguien sabe como arreglarlo

  10. Buenos días,
    He probado a cargar el juego en mi móvil (Android) y resulta que cuando haces click en un botón y seguidamente levantas el dedo este se queda seleccionado, realizando así la acción asignada para siempre hasta que tocas en algún punto de la pantalla.
    ¿Cómo podría solucionarlo?
    Un saludo!!

    • Hola Edgar, ¿te has asegurado de que en el evento “Pointer Up” está asignada la función de detener?
      Es raro… ¿has probado en otro dispositivo android? Quizás sea alguna particularidad de ese móvil en concreto.

      • Si, la función asignada a pointer up es la correcta. La verdad es que no he probado en otros dispositivos. De todas formas al final lo solucioné cambiando en el EventSystem el componente Input Module Standalone por Input Module Touch, y supongo que mediante un script con un #if y la plataforma podré activar uno y desactivar otro, ya que con el Touch el teclado no va.
        Un saludo y muchas gracias!

      • Por cierto, probé a bajarme tu proyecto y cargarlo en mi móvil (después de upgradearlo a la última versión de unity) y me daba el mismo problema. Así que puede que sea cosa de la versión o cosa del móvil (aunque este último me extraña).

  11. Hola amigo realmente te felicito por todo, estoy haciendo un juego en el que ya tengo asignado los scripts a una pelota, se mueve gracias a las teclas arriba abajo etc del teclado, como puedo asignar esas teclas a los botones, muchas gracias.

    • Hola stojan, tal y como explico en este tutorial, en el script de ControlarObjeto tendrías que implementar el movimiento de tu pelota, justo en esta parte:

      if(derecha)
      {
      // Movemos el objeto hacia la derecha

      }

      if (izquierda)
      {
      // Movemos el objeto hacia la izquierda

      }

      if (arriba)
      {
      // Movemos el objeto hacia arriba

      }

      if (abajo)
      {
      // Movemos el objeto hacia abajo

      }

      Donde pongo los puntos suspensivos (…) es donde tendrías que escribir el código que usas ahora para mover la pelota a izqda, dcha, alante y atrás.

  12. Hola excelente tutorial, muchas gracias, tengo un pequeño problemilla, como mi objeto es una pelota tiene que girar entonces cuando gira por gravedad el controlador se vuele loco, el de la derecha empieza a tirar para todas las direcciones y asi todos. Sera que este controlador no me sirve?. O puedo modificar fácilmente el script para que deje guiar la dirección según su frente.

    • Hola JohnnyBGoode, gracias por comentar.

      No sé si he entendido muy bien tu problema, pero si lo que quieres es simplemente rotar tu pelota con los botones táctiles de izquierda y derecha, lo que yo haría sería usar la función Transform.Rotate() en su sitio correspondiente del Update.

      Algo así como:

      if (derecha)
      {
      // Rotamos el objeto en función del eje Y (coordenadas del mundo)
      transform.Rotate(Vector3.up * Time.deltaTime * VelocidadDeGiro, Space.World);
      }

      O si quieres rotar tu pelota en coordenadas locales:

      if (derecha)
      {
      // Rotamos el objeto en función del eje Y (coordenadas locales)
      transform.Rotate(Vector3.up * Time.deltaTime * VelocidadDeGiro);
      }

      Échale un ojo a esto: https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

  13. Hola Santi utilice tus controles en mi juego para mover izquierda y derecha pero quiero que cuando se mueva rote 30 grados y no consigo hacerlo.
    public float Velocidad = 5.0F;
    public float anguloDeGiro = 30;
    private bool derecha = false;
    private bool izquierda = false;
    void Update ()
    {
    if(derecha)
    {
    this.transform.Translate (Vector3.right * Time.deltaTime * Velocidad);
    this.transform.Rotate (Vector3.right * Time.deltaTime * anguloDeGiro);

    • Creo que tu problema está en esta línea de código que usas para girar el objeto:
      this.transform.Rotate (Vector3.right * Time.deltaTime * anguloDeGiro);

      Si te fijas, estás girando el objeto sobre su eje “right”, es decir, sobre su eje horizontal, cuando lo que deberías hacer es girarlo sobre su eje vertical. Por tanto sería:
      this.transform.Rotate (Vector3.up * Time.deltaTime * anguloDeGiro);

  14. Hola

    Primero muchas gracias por compartir tu conocimiento, explicaste todo muy bien.

    Soy nuevo en unity y quiero hacer una aplicación 2D para móviles, pero quiero añadir un modelado 3D, quiero que este pueda rotarse, escalarse y tener alguna animación.

    ¿Sabes como puedo hacerlo ? me podrías ayudar.

    Muchas gracias.

    • Hola Dianiel, gracias por tu comentario. Lo que comentas se sale de lo que se está tratando en este tutorial en concreto, así que para la próxima te pido que para consultas que no sean sobre esta temática me las envíes por vía email, gracias!

      Lo que dices de añadir modelos 3D en un juego 2D se puede hacer sin problema desde que Unity incorporó su nuevo sistema 2D. A la hora de crear un proyecto, seleccionas que sea de tipo 2D (esto hará que la cámara sea de tipo ortográfico y demás configuraciones propias del 2D) y ya trabajando sobre una escena, puedes añadir objetos 3D sin problema. En cámara, dichos objetos los verás en modo ortográfico (2D) pero realmente son objetos 3D y puedes tratarlos como si de un proyecto 3D se tratase. Lo único que tienes que tener en cuenta es que, si quieres que dichos objetos 3D interactúen, mediante físicas, con objetos 2D, tendrás que incorporarle a los objetos 3D componentes propios del 2D (por ejemplo: collider2D, rigidbody2D, etc.).

      Saludos!

  15. Hola! genial haber encontrado este blog!
    Ahora tengo una duda, resulta que hace tiempo vengo haciendo juegos en 2d para android (en unity, obivo),
    y siempre tengo problema para crear mis controles, que se re-escalan mal en los distintos dispositivos, que esto que lo otro, pero el principal problema es trabajar con multitouch, sera posible alguna explicación o ejemplo del multitouch? por ejemplo, para presionar 2 botones a la vez, etc..

    Desde ya gracias por leerme y muy buen trabajo!

    • Hola Alejandro, el tema de que se te reescalen los controles en diferentes dispositivos se puede deber a que no estén anclados con sus puntos de anclaje correspondientes (las flechitas blancas que salen al seleccionar un control UI) y que el control canvas que contiene dichos controles no esté configurado con [Canvas Scaler -> UI Scale Mode -> Scale With Screen Size].

      Respecto al multitouching, en principio no deberías tener problemas ya que, si el móvil te permite más de 1 touch a la vez (todos los modelos actuales ya deberían hacerlo), los correspondientes botones puestos con Unity deberían responder de manera independiente. Otra cosa es que mediante código estés haciendo algo que impida que se ejecuten las acciones de cada botón de manera simultanea, pero si no es así, el multitouch debería funcionar sin problemas.

  16. hola Santi Andrade genial haber encontrado este blog!, somos estudiante de informatica y estamos reslizando un prototipo de realidad aumentada de un museo, sera que nos podras ayudar, con tu conocimiento.

    • Gracias por leer mis artículos, Angel! Suena interesante lo de vuestro prototipo. Aunque nunca he tocado nada relacionado con realidad aumentada, si alguno de mis tutoriales os puede servir de ayuda para alguna de vuestras implementaciones, genial! 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *