es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo reproducir acciones en un objeto threejs, cargado con useGLTF y mostrado con react three fiber.

Estoy cargando un objeto usando useGLTF (react three fiber).

Lo estoy mostrando con react three fiber.

Se muestra bien, pero no sé cómo animar el objeto, sus animaciones están definidas en el archivo que proporciono a useGLTF.

Aquí está el código sandbox: https://codesandbox.io/s/myoffice-3wpf4?file=/src/Components/MyOffice.js

Aquí está el proyecto en GitHub: https://github.com/rafaelsoteldosilva/serenity

El archivo .glb está en public/studio.glb.

Si lo cargas en el visor gltf (https://gltf-viewer.donmccurdy.com/) puedes ver que las animaciones están ahí.

Además, ¿qué tengo que hacer para que esas animaciones se reproduzcan automáticamente?

Gracias de antemano.

Rafael

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para animar el objeto cargado usando useGLTF en react-three-fiber, puedes utilizar el hook useAnimations proporcionado por react-three-fiber. Primero, importa useAnimations de react-three-fiber y luego úsalo para obtener acceso a las animaciones definidas en el archivo .glb.

    import { useGLTF, useAnimations } from "react-three-fiber";
    
    function MyOffice() {
      const { scene } = useGLTF("/studio.glb");
      const { actions } = useAnimations(scene.animations);
    
      return (
        <group>
          <primitive object="{scene}"></primitive>
        </group>
      );
    }
    

    Después de eso, puedes utilizar el objeto actions para reproducir o detener las animaciones. Para reproducir una animación automáticamente, puedes utilizar el hook useEffect de React para activar el método play cuando el componente se monta.

    import { useEffect } from "react";
    
    function MyOffice() {
      const { scene } = useGLTF("/studio.glb");
      const { actions } = useAnimations(scene.animations);
    
      useEffect(() => {
        actions.NombreDeLaAnimacion.play();
      }, [actions.NombreDeLaAnimacion]);
    
      return (
        <group>
          <primitive object="{scene}"></primitive>
        </group>
      );
    }
    

    Reemplaza “NombreDeLaAnimacion” con el nombre de la animación que deseas reproducir. Puedes encontrar el nombre de una animación en el visor gltf (https://gltf-viewer.donmccurdy.com/) o mediante el registro en la consola de las claves del objeto actions.

    console.log(Object.keys(actions));
    

    Esto mostrará un array con los nombres de cada animación definida en el archivo .glb.

    Nota: Para utilizar el hook useAnimations, debes asegurarte de que tu versión de Three.js sea compatible con la versión de react-three-fiber que estás utilizando. Consulta la documentación de react-three-fiber para obtener más información.

Comments are closed.