Wawa Sensei logo
LoginEnroll now

Eventos

Starter pack

Vamos a descubrir c贸mo manejar eventos de mouse, teclado y t谩ctiles en React Three Fiber para hacer nuestra escena 3D m谩s interactiva e inmersiva.

Mouse

Meshes tienen algunos eventos que podemos usar para manejar eventos de mouse.

Para detectar cuando el mouse est谩 sobre un mesh, podemos usar los eventos onPointerEnter y onPointerLeave.

Vamos a cambiar el color de nuestra esfera cuando el mouse est谩 sobre ella.

Empezamos creando un estado para almacenar si el mouse est谩 sobre la esfera o no:

const [hovered, setHovered] = useState(false);

Luego, a帽adimos los eventos onPointerEnter y onPointerLeave en el componente <mesh />:

<mesh
  {...props}
  onPointerEnter={() => setHovered(true)}
  onPointerLeave={() => setHovered(false)}
>
  {/* ... */}
</mesh>

Finalmente, cambiamos condicionalmente el color del material basado en el valor del estado hovered:

<meshStandardMaterial color={hovered ? "pink" : "white"} />

Change color on hover

Ahora, la esfera se vuelve rosa cuando el mouse est谩 sobre ella.

Tambi茅n podemos detectar cuando el mouse hace clic en un mesh usando el evento onClick.

A帽adimos un estado para almacenar si la esfera est谩 seleccionada o no:

const [selected, setSelected] = useState(false);

Luego, a帽adimos el evento onClick en el componente <mesh />:

<mesh
  {...props}
  onPointerEnter={() => setHovered(true)}
  onPointerLeave={() => setHovered(false)}
  onClick={() => setSelected(!selected)}
>
  {/* ... */}
</mesh>

Establecemos el estado selected al valor opuesto de su valor actual.

Finalmente, cambiamos condicionalmente el color del material basado en el valor del estado active:

let color = hovered ? "pink" : "white";
if (selected) {
  color = "hotpink";
}

return (
  <mesh
    {...props}
    onPointerEnter={() => setHovered(true)}
    onPointerLeave={() => setHovered(false)}
    onClick={() => setSelected(!selected)}
  >
    <sphereGeometry args={[0.5, 64, 64]} />
    <meshStandardMaterial color={color} />
  </mesh>
);

Decid铆 usar una variable para almacenar el color para hacer el c贸digo m谩s legible en lugar de usar dos operadores ternarios.

Eventos de burbujeo

Vamos a a帽adir una gran esfera detr谩s de nuestras tres esferas.

// ...

export const Experience = () => {
  return (
    <>
      <MoveableSphere scale={3} position-z={-10} />
      <MoveableSphere />
      <MoveableSphere position-x={-2} />
      <MoveableSphere position-x={2} />
      <ContactShadows
        rotation-x={Math.PI / 2}
        position={[0, -1.6, 0]}
        opacity={0.42}
      />

      <Environment preset="sunset" />
    </>
  );
};

Si pasamos el cursor sobre la esfera del medio, podemos ver que la gran esfera tambi茅n se ve afectada por los eventos onPointerEnter y onPointerLeave. Esto es porque esos eventos est谩n burbujeando.

El rayo lanzado utilizado por React Three Fiber para detectar los eventos del rat贸n atraviesa la esfera del medio y luego la gran esfera.

bubbleEvent

Para evitar que el evento burbujee, podemos usar stopPropagation en el event.

End of lesson preview

To get access to the entire lesson, you need to purchase the course.