Detectar contacto entre objetos en Spark AR

Resumen

Conectar el puntero con los fantasmas en Spark AR define la mecánica central de tu filtro de realidad aumentada: detectar contacto entre objetos y disparar una respuesta visual. Aquí aprendes a unir ambas estructuras usando senders, receivers y nodos de lógica para que la interacción funcione como un mini juego.

¿Cómo enviar la posición del puntero con un sender en Spark AR?

La forma más limpia de pasar información entre nodos en Spark AR es usar un sender en lugar de cables largos que crucen toda tu vista de patches.

Desde la estructura del puntero, conecta un sender a la salida de posición. Como esa posición viaja en tres ejes (X, Y, Z), debes configurarlo así:

  • Nombre: posición del puntero.
  • Tipo de dato: vector 3, no número.
  • Origen: la posición animada del puntero, con Y abajo y Z en cero.

Del otro lado, agregas un receiver y eliges posición del puntero para recuperar esa información.

¿Qué diferencia hay entre un sender dentro de un fantasma y uno fuera? Los senders creados dentro de un grupo o fantasma solo viven en esa jerarquía. Los que generas en el espacio principal sí pueden leerse con un receiver desde cualquier parte del proyecto.

¿Cómo recibir la posición dentro del fantasma?

El receiver te da la información, pero necesitas un punto donde conectarla dentro del fantasma. Para eso creas una nueva entrada en el nodo del fantasma.

Da clic derecho, entra a edit properties y agrega un nuevo input en la sección de inputs. Llámalo posición del puntero y configúralo como vector 3. El fantasma se actualiza solo y aparece la nueva entrada lista para conectar.

Dentro del fantasma ya tienes dos posiciones disponibles: la del puntero que acabas de inyectar y la del propio fantasma. Si las ves en cero al editar, no te preocupes: estás editando el nodo base, no las instancias específicas que ya tienen su valor en escena.

¿Cómo medir la distancia entre el puntero y el fantasma?

Para saber si el puntero tocó al fantasma, necesitas comparar sus posiciones. El nodo distance hace exactamente eso: toma dos puntos en el espacio y devuelve la distancia entre ellos.

Conectas la posición del fantasma y la posición del puntero al nodo distance. Aunque al inicio aparezca como número, en cuanto enchufas el segundo vector 3 el nodo entiende que está midiendo distancia espacial.

¿Para qué sirve el nodo distance en Spark AR? Calcula qué tan cerca están dos objetos en 3D. Te da un solo número que puedes comparar contra un umbral para detectar colisión o cercanía.

Ese número solo, sin contexto, no sirve. Necesitas decidir a partir de qué distancia consideras que el puntero tocó al fantasma.

¿Cómo usar less than e if para detectar el contacto?

Aquí entra la lógica condicional. El nodo less than compara dos números y devuelve verdadero solo cuando el primero es menor que el segundo.

La configuración queda así:

  • Primera entrada: la distancia calculada.
  • Segunda entrada: 0.1 como umbral de prueba.
  • Salida: una bandera true o false.

Esa bandera la conectas a un nodo if. El if en Spark AR espera una condición y entrega uno de dos valores según se cumpla o no. Si vienes de programación, puedes meterle más complejidad, pero por ahora basta con cambiar el color del fantasma.

Configura el if para devolver color en lugar de número:

  • Si se cumple: amarillo.
  • Si no se cumple: naranja.

Conectas la salida del if a la entrada de color del fantasma, reemplazando el valor estático que tenías antes. Al probarlo, los fantasmas cercanos al puntero cambian a amarillo y el resto se queda naranja.

Si notas que el orden de colores quedó invertido respecto a tu intención, no es un error de lógica: solo intercambiaste cuál color va en el true y cuál en el false. La estructura base sigue siendo válida.

¿Cómo agregar variación de velocidad entre fantasmas?

Con un solo valor de velocidad compartido, todos los fantasmas se mueven al unísono. Para que el juego se sienta más vivo, agregas un nodo multiply antes de pasar la velocidad a cada fantasma específico.

  • Fantasma 1: velocidad base.
  • Fantasma 2: velocidad multiplicada por 0.95.
  • Fantasma 3: velocidad multiplicada por 0.9.

Esa pequeña variación genera un offset visible entre los fantasmas y rompe el movimiento sincronizado. El resultado se siente más orgánico y menos mecánico.

Con esto tienes la primera fase del juego lista: detección de contacto, retroalimentación visual por color y movimiento variado. Desde aquí puedes seguir agregando detalles visuales, mejorar la lógica de puntaje y publicar tu filtro en el Spark AR Hub para compartirlo en tu perfil de Instagram.

¿Qué umbral de less than probaste tú para que la detección se sintiera natural? Cuéntame en los comentarios.