5. Casos de Estudio
5.3. Caso 2 Sistema Solar
El segundo caso de estudio consistió en la implementación de Sistema Solar. En la figura 5.14 se puede apreciar una captura de pantalla con el sistema implementado. Sistema Solar
es una aplicación interactiva y educativa en la que el usuario se encuentra dentro del sistema solar y puede tanto desplazarse por el mismo como interactuar con un menú que brinda información sobre los planetas. El caso número 2 tendrá un enfoque diferente al del caso 1 y al del caso 3. En este caso se plantearon 2 escenarios particulares: un escenario en el que el usuario se encuentre viendo hacia un determinado planeta y realice un gesto Tilt Right
para ir hacia un planeta en particular (1) y otro en el que el usuario se encuentre viendo hacia un determinado planeta y realice un gesto Tilt Left para ir a otro determinado planeta (2). Presentados estos dos escenarios se obtuvo la implementación que se analizará a lo largo de esta sección. Si bien es cierto que esto se podría abstraer para todos los planetas del sistema solar esto escapa del enfoque propuesto. Se optó por realizar una implementación no genérica para diferenciar este caso de los demás y aportar conclusiones sobre cómo se comporta el framework en casos de implementación tan puntuales. Dicho esto, se desea agregar la siguiente lista de gestos para satisfacer los escenarios planteados y la interacción con el menú de salida del sistema solar:
● (1) Estando posicionado viendo hacia el planeta Earth: Inclinar la cabeza hacia la derecha para ir Mercurio.
● (2) Estando posicionado viendo al planeta enano Plutón: Inclinar la cabeza hacia la izquierda para ir a Venus.
● Habiendo abierto el menú de salir de la aplicación desde el menú principal de la aplicación (Menú planetario): Realizar un gesto de SI para salir de la misma
● Habiendo abierto el menú de salir de la aplicación desde el menú principal de la aplicación (Menú planetario): Realizar un gesto de NO para cerrar dicho menú En primer lugar, se desarrolló una implementación básica de la aplicación que no contenía los gestos para navegar el espacio virtual ni interactuar con el menú. Luego, se le solicitó a un desarrollador que implemente los 4 gestos nombrados anteriormente utilizando la implementación del framework descrita en el capítulo 4 para lograr el fin planteado en 5.3 mientras que a un segundo desarrollador se le solicitó lo mismo sin utilizar el framework. A continuación, procederemos a analizar ambas estrategias y el resultado que cada una arrojó.
Figura 5.14. Sistema Solar antes de incluir el reconocimiento de gestos.
5.3.1. Implementación sin utilizar el framework
Para implementar los requerimientos descritos inicialmente en esta sección se decidió realizar un script por cada requerimiento y utilizar el método Update() de Unity para verificar en cada generación de frame si estos se están cumpliendo. De esta forma se generaron 4 Scripts, uno para cada requerimiento. Cada script evaluará si debe o no lanzar la acción que tiene asociada, y de evaluar en verdadero procederá a ejecutar dicha acción. En adelante se hablará de desplazamiento a izquierda entendiendo que la izquierda siempre es el primer planeta que se encuentra desde el que estamos viendo, hacia la dirección opuesta hacia donde está el Sol. En el caso en el que no haya otro planeta hacia la izquierda, se desplazará hacia Mercurio. Utilizaremos el mismo razonamiento en sentido contrario al hablar de la derecha.
5.3.1.1. Configuración del script número 1: DezplazarAIzq
El script 1 tiene como objetivo desplazar la cámara hacia la izquierda del planeta Pluto (Mercury) al realizar un gesto de Tilt Left, aunque sin utilizar el framework. Este script tiene 4 parámetros:
1. User: Referencia al objeto al que estamos observando para ver si ingresa en la zona, en este caso la cámara que representa al usuario.
2. Planet: el planeta al que se está observando en ese momento.
3. Range: Define la zona de aceptación, medida en unidades de distancia de Unity 4. Inclination: Define el ángulo de inclinación que se espera que el dispositivo supere
Establecemos el parámetro range en 5000, inclination en 70º, Planet en Pluto y colocamos la referencia a nuestro usuario (CardboardMain) como se puede ver en la figura 5.15. Este es un ejemplo puntual, si se desea que desde cada planeta se pueda pasar al siguiente o al anterior se debe crear un script por cada movimiento. Con esto concluye la configuración del script.
Figura 5.15. Configuración del script DesplazarAIzq. 5.3.1.2. Funcionamiento del script número 1: DesplazarAIzq
El script número 1 (Figura 5.16) se encarga de ver si el usuario se encuentra en una distancia de 5000 o menos unidades de medición del planeta Plutón. Para lograr esto se chequea en tiempo de ejecución si la posición del objeto referenciado se encuentra a 5000 o menos unidades de distancia del objeto al que está adjunto el script (líneas 22-24). De cumplir con esa condición se toman los datos del sensor acelerómetro para comprobar si el usuario está inclinando el dispositivo y si esa inclinación supera los 70º que se encuentran configurados (línea 25). De cumplirse ambas premisas se lanza la acción configurada. En este caso la acción se encuentra dentro del mismo script y realiza el desplazamiento del usuario hacia Mercury (líneas 26-27). Esta acción es particular de este caso, si se desea realizar el movimiento hacia otro planeta se debe crear otro script. De esta forma, el script número 1 resuelve la problemática sin utilizar el framework.
Figura 5.16. Script implementado para la operación de DesplzarAIzq. 5.3.1.3. Configuración del script número 2: DezplazarADer
El script 2 tiene como objetivo desplazar la cámara hacia la derecha del planeta Earth(Venus) al realizar un gesto de Tilt Right, aunque sin utilizar el framework. Este script tiene 4 parámetros:
5. User: Referencia al objeto al que estamos observando para ver si ingresa en la zona, en este caso la cámara que representa al usuario.
6. Planet: el planeta al que se está observando en ese momento.
7. Range: Define la zona de aceptación, medida en unidades de distancia de Unity 8. Inclination: Define el ángulo de inclinación que se espera que el dispositivo supere
utilizando el celular de forma Landscape Left.
Establecemos el parámetro range en 5000, inclination en 70º, Planet en Earth y colocamos la referencia a nuestro usuario (CardboardMain) como se puede ver en la figura 5.17. y con esto concluye la configuración del script.
Figura 5.17. Configuración del script DesplazarADer. 5.3.1.4. Funcionamiento del script número 2: DesplazarADer
El script número 2 (Figura 5.18) se encarga de ver si el usuario se encuentra en una distancia de 5000 o menos unidades de medición del planeta Earth. Para lograr esto se chequea en tiempo de ejecución si la posición del objeto referenciado se encuentra a 5000 o menos unidades de distancia del objeto al que está adjunto el script (líneas 22-24). De cumplir con esa condición se toman los datos del sensor acelerómetro para comprobar si el usuario está inclinando el dispositivo y si esa inclinación supera los 70º que se encuentran configurados (línea 25). De cumplirse ambas premisas se lanza la acción configurada. En este caso la acción se encuentra dentro del mismo script y realiza el desplazamiento del usuario hacia Venus (líneas 26-27). De esta forma, el script número 2 resuelve la problemática sin utilizar el framework.
Figura 5.18. Script implementado para la operación de DesplazarAIzq. 5.3.1.5. Configuración del script número 3: ExitApp
El script 3 tiene como objetivo finalizar la aplicación al realizar un gesto Yes una vez abierto el menú de salir de la aplicación, aunque sin utilizar el framework. Este script tiene 4 parámetros:
1. User: Referencia al objeto al que estamos observando para ver si ingresa en la zona, en este caso la cámara que representa al usuario.
2. SureExitPanel: Referencia al panel de “¿Realmente desea salir?”
3. Gesture Speed: Define la velocidad mínima con la que se debe realizar el gesto medida en radianes/segundos
4. Max Time: Define el tiempo máximo para realizar el gesto desde principio a fin, medido en segundos.
Establecemos el parámetro Gesture Speed en 2 r/s, MaxTime en 5 segundos, y colocamos la referencia a nuestro usuario (CardboardMain) y la referencia al menú SureExitPanel como se puede ver en la figura 5.19. Con esto concluye la configuración del script.
Figura 5.19. Configuración del script ExitApp. 5.3.1.6. Funcionamiento del script número 3: ExitApp
En la Figura 5.20 se puede ver el script número 3. Como se puede observar en el código del script el mismo no posee una condición convencional en la que se define una zona a la que debe entrar el User para luego activarse el reconocimiento de gestos. En este caso, el reconocimiento está activado desde el principio. Desde el comienzo, se toman los datos del sensor giroscopio para comprobar si el usuario realiza los tres movimientos necesarios (arriba-abajo-arriba) para cumplir con la velocidad configurada (líneas 38-51). De cumplirse ambas premisas se lanza la acción configurada. En este caso la acción se encuentra dentro del mismo script (línea 57) y a diferencia de los scripts presentados hasta ahora sólo se lanzará si el panel SureExitPanel se encuentra activo en ese momento (línea 56). Si la acción logra ser lanzada luego de esta última condición, la aplicación finalizará. De esta forma, el script número 3 resuelve la problemática sin utilizar el framework.
Figura 5.20. Script implementado para la operación de ExitApp. 5.3.1.7. Configuración del script número 4: NotExitApp
El script 4 tiene como objetivo finalizar el menú de salir de la aplicación al realizar un gesto de “No” aunque sin utilizar el framework. Este script tiene 4 parámetros:
1. User: Referencia al objeto al que estamos observando para ver si ingresa en la zona, en este caso la cámara que representa al usuario.
3. Max Time To Recognize Gesture: Define el tiempo máximo para realizar el gesto desde principio a fin, medido en segundos.
4. Gesture Speed: Define la velocidad mínima con la que se debe realizar el gesto medida en radianes/segundos
1. MenuPlanetarioPanel: Referencia al panel “Menu Planetario”
Establecemos el parámetro Gesture Speed en 2 r/s, MaxTime en 5 segundos, y colocamos la referencia a nuestro usuario (CardboardMain), al menú SureExitPanel y finalmente al menú MenuPlanetarioPanel como se puede ver en la figura 5.21. Con esto concluye la configuración del script.
Figura 5.21. Configuración del script ExitApp. 5.3.1.8. Funcionamiento del script número 4: NotExitApp
En la Figura 5.22 se puede ver el script número 4. Como se puede observar en el código del script el mismo no posee una condición convencional en la que se define una zona a la que debe entrar el User para luego activarse el reconocimiento de gestos. En este caso, el reconocimiento está activado desde el principio. Desde el comienzo, se toman los datos del sensor giroscopio para comprobar si el usuario realiza los tres movimientos necesarios (izquierda-derecha-izquierda) para cumplir con la velocidad configurada (líneas 38-49). De cumplirse ambas premisas se lanzan las acciones configuradas. En este caso las acciones se encuentran dentro del mismo script (líneas 54-55) y a diferencia de los scripts presentados hasta ahora sólo se lanzarán si el panel SureExitPanel se encuentra activo en ese momento (línea 53). Si las acciones logran ser lanzada luego de esta última condición, el panel SureExitPanel desaparecerá y volverá a aparecer el panel MenuPlanetarioPanel. De esta forma, el script número 4 resuelve la problemática sin utilizar el framework.
5.3.2. Implementación utilizando el framework
Para aprovechar las ventajas del framework se decidió primero formar las reglas que se utilizarían para los 4 requerimientos presentados en la introducción del caso 2. Recordemos que cada regla está conformada por Condición - Gesto - Acción. Así, análogamente al caso anterior cada regla será asociada uno a uno con una Condición, un gesto y una Acción utilizando los componentes que el framework provee. La regla número 1 y 2 en la tabla 5.3 se asociará con la Condición - Gesto - Acción relacionados a los movimientos de la cámara para pasar de un planeta a otro y las reglas 3 y 4 en la tabla 5.3 se asociarán con la Condición - Gesto - Acción relacionadas con la interacción con el menú de salir de la aplicación. A continuación, la Tabla 5.3 muestra como ejemplo la materialización de las 4 reglas haciendo uso de la implementación del framework explicado en el capítulo 4. En ella podemos ver en la primera columna el número de regla. En la segunda columna se puede ver la condición de dicha regla. En la tercera columna se puede ver el/los gesto/s que se encuentran en dicha regla y por último en la cuarta columna la acción asociada a dicha regla. Así, la regla 1 por ejemplo está formada por la condición Condition_NearCube el gesto Gesture_TiltLeft y la acción MenuPlanetario.nextPlanet().
Implementación Regla N.º
Condición Gesto Acción
1 Condition_NearSphere Gesture_TiltLeft MenuPlanetario. nextPlanet() 2 Condition_NearSphere Gesture_TiltRight MenuPlanetario.
previousPlanet()
3 Condition_True Gesture_Yes MenuPlanetario.
OnExitControlled Pressed()
4 Condition_True Gesture_No MenuPlanetario.
OnNotExitContro lledPressed()
Tabla 5.3. Configuración de las reglas utilizando la implementación del framework en Unity.
5.3.2.1. Configuración de la regla número 1
El objetivo de la regla número 1 es mover la cámara desde la vista hacia el planeta Plutón hacía la vista al planeta mercurio luego de que la cámara entre en la zona esférica cercana al planeta Plutón y el usuario realice el gesto de Tilt Left. Este es un caso puntual y si se desea que todos los planetas posean la misma característica se debe realizar un script y configurarlo para cada uno de ellos.
La regla número 1 (fila 1 en tabla 5.3) se encarga de ver si el usuario se encuentra en una distancia de 5000 o menos unidades de medición del planeta Plutón en una zona esférica. Para esto se establece un tamaño de rango de 5000 en la configuración de la condición
Condition_NearSphere y se establece a Plutón como el objeto inmóvil (Static), centro de la zona esférica. De esta forma queda configurada la condiciónde la regla. Para la configuración del gesto Gesture_TiltLeft se establece la inclinación (Inclination) en 70º para que cuando el usuario incline al dispositivo hacia la izquierda con una inclinación tal que supere los 70º partiendo desde una posición Landscape Left con el dispositivo mirando al frente, el gesto sea reconocido. Luego se configura un GestureListener con el gesto y la condición anteriormente descritos y se agrega la acción a ejecutar en caso de cumplirse las premisas antes enunciadas. En este caso la acción es el método MenuPlanetario.nextPlanet(). La figura 5.23 muestra la configuración completa de la regla explicada. En dicha figura se puede ver la configuración de Condition_NearSphere, Gesture_TiltLeft y GestureListener. A continuación, explicaremos cada parámetro a configurar de las diferentes partes de la regla. La condición será Condition_NearSphere, el gesto será Gesture_TiltLeft y la acción a llamar será MenuPlanetario.nextPlanet(). La condición reconocerá si el usuario se encuentra dentro de la zona esférica, el gesto reconocerá si el gesto Tilt Left fue realizado y la acción moverá la cámara hacia la vista de Mercurio que es el siguiente planeta a Plutón.
Figura 5.23. Configuración de la regla 1. 5.3.2.2. Configuración de la regla número 2
El objetivo de la regla número 2 es mover la cámara desde la vista hacia el planeta Earth hacía la vista al planeta Venus luego de que la cámara entre en la zona esférica cercana al planeta Earth y el usuario realice el gesto de Tilt Right. Este es un caso puntual y si se desea que todos los planetas posean la misma característica se debe realizar un script y configurarlo para cada uno de ellos. La regla número 2 (fila 2 en tabla 5.3) se encarga de ver si el usuario se encuentra en una distancia de 5000 o menos unidades de medición del planeta Earth en una zona esférica. Para esto se establece un tamaño de rango de 5000 en la configuración de la condición Condition_NearSphere y se establece a la Earth como el objeto inmóvil (Static), centro de la zona esférica. De esta forma queda configurada la condiciónde la regla. Para la configuración del gesto Gesture_TiltRight se establece la inclinación (Inclination) en 70º para que cuando el usuario incline al dispositivo hacia la derecha con una inclinación tal que supere los 70º partiendo desde una posición Landscape Left con el dispositivo mirando al frente, el gesto sea reconocido. Luego se configura un GestureListener con el gesto y la
condición anteriormente descritos y se agrega la acción a ejecutar en caso de cumplirse las premisas antes enunciadas. En este caso la acción es el método
MenuPlanetario.previousPlanet(). La figura 5.24 muestra la configuración completa de la regla explicada. En dicha figura se puede ver la configuración de Condition_NearSphere, Gesture_TiltRight y GestureListener. A continuación, explicaremos cada parámetro a configurar de las diferentes partes de la regla. La condición será Condition_NearSphere, el gesto será Gesture_TiltRight y la acción a llamar será MenuPlanetario.previousPlanet(). La condición reconocerá si el usuario se encuentra dentro de la zona esférica, el gesto reconocerá si el gesto Tilt Right fue realizado y la acción moverá la cámara hacia la vista de Venus que es el planeta anterior a Plutón.
Figura 5.24. Configuración de la regla 2. 5.3.2.3. Configuración de la regla número 3
El objetivo de la regla número 3 es cerrar la aplicación estando en cualquier lugar del mundo virtual al realizar el gesto Yes habiendo previamente abierto el menú de salir de la aplicación que pregunta al usuario si éste desea salir de la aplicación. Este menú se abre seleccionando la opción de “Salir” en el menú principal de la aplicación (MenuPlanetario). La regla número
3 (fila 3 en tabla 5.3) no presenta una condición de cercanía a una zona, así que se utilizará la condición Condition_True para habilitar el reconocimiento del gesto continuamente. De esta forma queda configurada la condiciónde la regla. Cabe destacar que la condición de que el menú de salir de la aplicación se encuentre abierto actualmente no está soportada por el framework y dicha verificación se encuentra dentro del código de la acción
OnExitControlledPressed(). Para la configuración del gesto Gesture_Yes se establece la velocidad de movimiento del gesto (GestureMovementSpeed) en 2 r/s para que cuando el usuario realice los 3 movimientos relacionados con el gesto Yes (arriba-abajo-arriba) a una velocidad tal que supere los 2 r/s partiendo desde una posición Landscape Left con el dispositivo mirando al frente, el gesto sea reconocido. Luego se configura un
GestureListener con el gesto y la condición anteriormente descritos y se agrega la acción a ejecutar en caso de cumplirse las premisas antes enunciadas. En este caso la acción es el método MenuPlanetario.OnExitControlledPressed(). La figura 5.25 muestra la configuración completa de la regla explicada. En dicha figura se puede ver la configuración de
Condition_True, Gesture_Yes y GestureListener. A continuación, explicaremos cada parámetro a configurar de las diferentes partes de la regla. La condición será
Condition_True, el gesto será Gesture_Yes y la acción a llamar será
MenuPlanetario.OnExitControlledPressed(). La condición permitirá el reconocimiento del gesto en todo momento, el gesto reconocerá si el gesto Yes fue realizado y la acción cerrará la aplicación de estar el menú de salir de la aplicación.
5.3.2.4. Configuración de la regla número 4
El objetivo de la regla número 3 es cerrar el menú de salir de la aplicación estando en cualquier lugar del mundo virtual al realizar el gesto No habiendo previamente abierto dicho menú que pregunta al usuario si éste desea salir de la aplicación. La regla número 4 (fila 4 en tabla 5.3) no presenta una condición de cercanía a una zona, así que se utilizará la