es:manual:items:interactivos:unity
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
es:manual:items:interactivos:unity [2021/06/16 10:01] – root | es:manual:items:interactivos:unity [2023/05/08 12:26] (actual) – root | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ~~NOTOC~~ | ||
===== Interacción con Unity ===== | ===== Interacción con Unity ===== | ||
- | [[https:// | + | [[https:// |
- | A través de esta interactividad Unity-Javascript se pueden integrar llamadas desde la pagina que contiene un ítem en Siette, y el juego, lo que permite construir una pregunta interactiva. | + | A través de esta interactividad Unity-Javascript |
- | A continuación se muestra un ejemplo | + | A continuación se muestran ejemplos |
- | Se trata de un minijuego denominado // | + | ==== Ejemplo 1 ==== |
+ | Se trata de la implementación del conocido juego [[wpes> | ||
- | {{ es: | + | El juego es configurable, |
+ | |||
+ | {{ es: | ||
+ | |||
+ | Como resultado de la interacción el juego devuelve a Siette varios valores numéricos, correspondientes al número de secuencias correctas, incorrectas, | ||
+ | |||
+ | === Proceso de carga del juego === | ||
+ | |||
+ | El juego esta implementado en Unity, aunque para Siette se trata de un ítem interactivo [[es: | ||
+ | |||
+ | <code html> | ||
+ | <link rel=" | ||
+ | <link rel=" | ||
+ | <script src="/ | ||
+ | <script src="/ | ||
+ | |||
+ | <div id=" | ||
+ | |||
+ | < | ||
+ | var unityInstance = UnityLoader.instantiate(" | ||
+ | "/ | ||
+ | {onProgress: | ||
+ | |||
+ | var play = true; | ||
+ | | ||
+ | if (play) { | ||
+ | unityInstance.SendMessage(" | ||
+ | unityInstance.SendMessage(" | ||
+ | unityInstance.SendMessage(" | ||
+ | unityInstance.SendMessage(" | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | unityInstance .SendMessage(' | ||
+ | } | ||
+ | | ||
+ | play = false; | ||
+ | | ||
+ | | ||
+ | | ||
+ | }, conta ); | ||
+ | } | ||
+ | } | ||
+ | function load() { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | load(); | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | La cabeceera de este código carga los ficheros auxiliares de Unity, y a continuación establece un '' | ||
+ | |||
+ | <code javascript> | ||
+ | var unityInstance = UnityLoader.instantiate(" | ||
+ | "/ | ||
+ | {onProgress: | ||
+ | </ | ||
+ | |||
+ | lo que provoca que aparezca el logo de Unity y comience la carga: | ||
+ | |||
+ | {{ es: | ||
+ | |||
+ | El juego está programado para esperar a recibir los parámetros antes de comenzar propiamente su ejecución, presentando una vez concluida la carga, la siguiente pantalla | ||
+ | |||
+ | {{ es: | ||
+ | |||
+ | La carga del juego y de la pagina web que lo contiene se hace de forma asíncrona. Los parámetros se envian al juego tan pronto como se ha cargado la página y se invoca la ejecución de la función '' | ||
+ | |||
+ | {{ es: | ||
+ | |||
+ | Un detalle importante a tener en cuenta es que el juego puede no haber terminado de cargarse al ejecutar la función '' | ||
+ | |||
+ | <code javascript> | ||
+ | function load() { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Final del juego === | ||
+ | |||
+ | El final del juego se puede producir por dos circunstancias: | ||
+ | |||
+ | * El alumno ha completado todas las secuencias que se le han propuesto. En este caso el juego ejecuta una llamada a la [[es: | ||
+ | * El alumno pulsa el botón '' | ||
+ | |||
+ | <code javascript> | ||
+ | | ||
+ | unityInstance .SendMessage(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Normalmente, | ||
+ | |||
+ | Las llamadas a a la [[es: | ||
+ | |||
+ | ;#; | ||
+ | ' | ||
+ | ;#; | ||
+ | |||
+ | En este caso estos valores son indicadores del resultado obtenido con la interaccion del juego en concreto: | ||
+ | |||
+ | * Número de secuencias correctas , | ||
+ | * Número de secuencias incorrectas , | ||
+ | * Máximo número de secuencias consecutivas correctas , | ||
+ | * Máximo número de secuencias consecutivas incorrectas , | ||
+ | * Tiempo de juego | ||
+ | |||
+ | Siette almacena evaluará esta respuesta, por ejemplo mendiante [[es: | ||
+ | |||
+ | === Presentación de resultados === | ||
+ | |||
+ | Cuando Siette necesite presentar los resultados de esta evaluación, | ||
+ | |||
+ | <code javascript> | ||
+ | | ||
+ | play = false; | ||
+ | | ||
+ | | ||
+ | | ||
+ | }, conta ); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{ es: | ||
+ | |||
+ | En la imagen puede verse que Siette tambien muestra la respuesta del alumno, (la cadena de indicadores recibida). Esta duplicidad de información puede evitarse añadiendo '' | ||
+ | |||
+ | En el [[#Ejemplo 2|siguiente ejemplo]] se describe en detalle como hay que programar en Unity la recepción y envío de todos estos mensajes. | ||
+ | |||
+ | |||
+ | ==== Ejemplo 2 ==== | ||
+ | |||
+ | Se trata de un minijuego denominado // | ||
+ | |||
+ | {{ es: | ||
El regalo nunca llega a alcanzarse, pero el niño debe intentarlo procurando no salirse de la carretera. Si lo hace aparece un tono de aviso. | El regalo nunca llega a alcanzarse, pero el niño debe intentarlo procurando no salirse de la carretera. Si lo hace aparece un tono de aviso. | ||
- | {{ es: | + | {{ es: |
Finalmente el niño se aburre y pulsa el botón '' | Finalmente el niño se aburre y pulsa el botón '' | ||
- | {{ es: | + | {{ es: |
- | Como resultado de la interacción el juego devuelve a Siette varios valores numéricos, correspondientes al tiempo que ha estado el coche dentro de la carretera, el tiempo que ha estado fuera, el número de veces que se ha salido, etc. Con estos datos Siette realiza la evaluación utilizando como patrones [[funciones de evaluación]] a las que asigna diversas puntuaciones | + | Como resultado de la interacción el juego devuelve a Siette varios valores numéricos, correspondientes al tiempo que ha estado el coche dentro de la carretera, el tiempo que ha estado fuera, el número de veces que se ha salido, etc. Con estos datos Siette realiza la evaluación utilizando como patrones [[funciones de evaluación]] a las que asigna diversas puntuaciones |
+ | |||
+ | === Ejecución del juego === | ||
El juego esta implementado en Unity, aunque para Siette se trata de un ítem interactivo [[es: | El juego esta implementado en Unity, aunque para Siette se trata de un ítem interactivo [[es: | ||
Línea 48: | Línea 191: | ||
+ | Esta pagina carga el juego en unity en un [[https:// | ||
+ | |||
+ | <code html> | ||
+ | < | ||
+ | <html lang=" | ||
+ | < | ||
+ | <meta charset=" | ||
+ | <meta http-equiv=" | ||
+ | < | ||
+ | <link rel=" | ||
+ | <link rel=" | ||
+ | <script src=" | ||
+ | <script src=" | ||
+ | < | ||
+ | var gameInstance = UnityLoader.instantiate( | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | ); | ||
+ | | ||
+ | window.parent.RespuestaActiva(respuesta); | ||
+ | } | ||
+ | | ||
+ | | ||
+ | } | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | <div class=" | ||
+ | <div id=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | === Paso de parámetros de configuración === | ||
+ | |||
+ | Dentro de esta página se ha definido una funcion javascript '' | ||
+ | |||
+ | {{ es: | ||
+ | |||
+ | Como puede observarse en el código del enunciado, la llamada a esta función se repite varias veces a lo largo de la carga del juego, esto es debido a que hasta que el juego no termina de cargar las llamadas no tienenefecto, | ||
+ | |||
+ | En el código del iframe, las llamadas a la funcion '' | ||
+ | |||
+ | <code c> | ||
+ | using System.Collections; | ||
+ | using System.Collections.Generic; | ||
+ | using UnityEngine; | ||
+ | using System.Runtime.InteropServices; | ||
+ | using UnityEngine.SceneManagement; | ||
+ | |||
+ | public class MaterialSelector : MonoBehaviour { | ||
+ | .... | ||
+ | string SceneName; | ||
+ | public void SelectScene(int Scene) { | ||
+ | if (Scene == 1) { | ||
+ | SceneName = " | ||
+ | SceneManager.LoadScene(SceneName); | ||
+ | } else if (Scene == 2) { | ||
+ | SceneName = " | ||
+ | SceneManager.LoadScene(SceneName); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Obtención de resultados === | ||
+ | |||
+ | Para obtener los resultados de la evaluación se usa la [[es: | ||
+ | |||
+ | En concreto dentro de Unity se ha implementado la clase '' | ||
+ | |||
+ | <code c> | ||
+ | using System.Collections; | ||
+ | using System.Collections.Generic; | ||
+ | using UnityEngine; | ||
+ | using System.IO; | ||
+ | using System.Runtime.InteropServices; | ||
+ | |||
+ | public class Log : MonoBehaviour | ||
+ | { | ||
+ | [DllImport(" | ||
+ | private static extern void ReportState(string str); | ||
+ | | ||
+ | float t; | ||
+ | float clickcount=0; | ||
+ | float clickout; | ||
+ | float clickin; | ||
+ | float timeout; | ||
+ | float timein; | ||
+ | |||
+ | ..... | ||
+ | |||
+ | void OnApplicationQuit() | ||
+ | { | ||
+ | timeout = clickout / clickcount * t; | ||
+ | timein = clickin / clickcount * t; | ||
+ | ReportState( | ||
+ | " | ||
+ | + t.ToString(" | ||
+ | + timein.ToString(" | ||
+ | + timeout.ToString(" | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | La función '' | ||
+ | |||
+ | <code javascript> | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | Cuando ha transcurrido el tiempo límite (en otros casos pueden darse otras circunstancias), | ||
+ | |||
es/manual/items/interactivos/unity.1623837711.txt.gz · Última modificación: 2021/06/16 10:01 por root