Fundamentals
Core
Master
Shaders
Eventos
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"} />
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.
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.