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

native questionnaire→ game compiler→ 3D mechanics→ Three.js→ Rapier→ P2LRN events / score

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-3d

Objetos físicos que se colocan en posiciones ordenadas.

matching-3d

Nodos de izquierda y derecha que se conectan sin alterar el modelo de respuesta.

classification-3d

Objetos 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.

questionnaire.json
{
  "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.

Node.js
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
});
Identificador estable

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.1

Escena, cámara, luces, materiales, raycasting y WebGL.

Rapier 3D 0.21.0

Cuerpos rígidos, colliders, gravedad y step físico.

no-physics

Fallback 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.

separation of concerns
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.

¿Necesitas integrar una mecánica nueva?

Contactar