JUEGOS / 3D
Juegos 3D portables
El entorno 3D de P2LRN utiliza Three.js para la escena y Rapier para las físicas, con una capa de integración propia del Player.
Arquitectura
La lógica educativa queda separada del render y de las físicas. Three.js dibuja; Rapier calcula cuerpos y colisiones; el runtime de cuestionario mantiene respuestas, puntuación, progreso e intentos.
Mecánicas disponibles
ordering-3dObjetos físicos que se colocan en posiciones ordenadas.
matching-3dNodos de izquierda y derecha que se conectan sin alterar el modelo de respuesta.
classification-3dObjetos que se depositan en categorías. Es un tipo nativo del cuestionario P2LRN.
Crear y editar juegos 3D desde Studio
En Añadir contenido → Juegos selecciona Juego 3D (ordenar), Relacionar 3D o Clasificar 3D. Todos utilizan el mismo motor 3D de Player; no son motores distintos.
Abre la actividad en el árbol del curso. En cada pregunta, el campo Tipo permite cambiar entre Ordenar, Relacionar y Clasificar. Puedes combinar preguntas de las tres modalidades en una misma actividad.
Al cambiar el tipo de una pregunta se sustituyen sus elementos y soluciones específicos, porque sus formatos son diferentes. Se conservan el enunciado personalizado, el tiempo y la puntuación; revisa las nuevas respuestas antes de exportar el archivo .p2lrn. Prueba el resultado con Vista alumno.
Pregunta de clasificación
Este ejemplo muestra la forma de una pregunta de clasificación que puede representarse dentro de una experiencia 3D.
{
"id": "clasifica",
"type": "classification",
"prompt": "Clasifica los elementos por su naturaleza.",
"points": 4,
"required": true,
"items": [
{"id": "perro", "text": "Perro"},
{"id": "roble", "text": "Roble"}
],
"categories": [
{"id": "animal", "text": "Animal"},
{"id": "planta", "text": "Planta"}
],
"solution": {
"assignments": [
{"item": "perro", "category": "animal"},
{"item": "roble", "category": "planta"}
]
}
}
El mismo tipo se puede resolver con el renderer estándar mediante selectores accesibles o con el renderer 3D. La respuesta lógica sigue siendo { classifications: { itemId: categoryId } }.
Crear un paquete 3D
Si generas el curso por código, añade el cuestionario al workspace y solicita la presentación 3D antes de construir el paquete.
import {P2LRNAuthoringWorkspace} from '@p2lrn/toolkit/authoring';
const workspace = P2LRNAuthoringWorkspace.create('./workspace', {
title: 'Quest 3D portable',
language: 'es'
});
workspace.addQuestionnaire({
source: './quest-3d.json',
key: 'quest-3d',
title: 'Laboratorio Quest 3D',
renderer: 'https://p2lrn.org/renderer/questionnaire/3d-order-match'
});
workspace.build('./quest-3d-course.p2lrn', {
strictProfiles: true
});
El renderer conserva por compatibilidad el identificador histórico 3d-order-match, aunque ahora también soporta clasificación.
Three.js y Rapier están dentro de la distribución
El build del Player fija y verifica las versiones antes de copiarlas a dist/vendor/. No se descargan desde un CDN de terceros durante la partida.
Three.js 0.186.1Escena, cámara, luces, materiales, raycasting y WebGL.
Rapier 3D 0.21.0Cuerpos rígidos, colliders, gravedad y step físico.
no-physicsFallback local si el motor físico no se puede inicializar; mantiene la representación y los controles.
La lógica no depende de las físicas
Operaciones como ordenar, conectar, clasificar u ownership viven en game-3d-mechanics.js. Un cambio de motor físico no cambia las respuestas ni el cálculo educativo.
visual interaction
↓
{ kind: "classification-set",
itemId: "perro",
categoryId: "animal" }
↓
questionnaire answer
↓
score / progress / complete
Accesibilidad y alternativa
La escena 3D no es el único control. Ordenar, relacionar y clasificar mantienen controles HTML equivalentes junto al canvas. El alumno puede completar la misma actividad sin depender exclusivamente de precisión gráfica o puntero 3D.
Ejemplo ejecutable
El ejemplo canónico contiene las tres mecánicas en un único paquete validado estrictamente.
Limitaciones
Este runtime no declara todavía WebXR/Meta Quest ni sincronización multijugador como capacidad P2LRN. La arquitectura deja separadas entrada, físicas y mecánicas para poder añadirlas después sin ligar el formato a un LMS concreto.