방명록
- [React.js] React Three Fiber(R3F) 애니메이션 재생2023년 12월 12일 10시 56분 12초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. useEffect 훅에서 play() 메서드 작동 안 됨
3D 모델의 애니메이션을 재생하고자 하였다. 아래의 코드를 적용해 봤는데 애니메이션이 플레이되지 않았다.
import React, { useState, useEffect } from "react"; import { GLTFLoader } from "three/addons/loaders/GLTFLoader"; import { useLoader } from "@react-three/fiber"; const Model = ({ characterPath, scale }) => { const gltf = useLoader(GLTFLoader, characterPath); const mixer = new THREE.AnimationMixer(gltf.scene); const action = mixer.clipAction(gltf.animations[0]); useEffect(() => { action.play(); // 애니메이션 시작 return () => { mixer.stopAllAction(); // 컴포넌트가 언마운트되면 애니메이션 정지 }; }, [action]); return <primitive object={gltf.scene} scale={scale} />; };
2. useFrame 훅 사용하여 해결
R3F에서 useFrame 훅을 제공했는데 이 훅을 사용해 애니메이션을 성공적으로 재생할 수 있었다.
import { GLTFLoader } from "three/addons/loaders/GLTFLoader"; import { useLoader, useFrame } from "@react-three/fiber"; import * as THREE from "three"; const Model = ({ characterPath, scale }) => { let mixer = null; const { scene, animations } = useLoader(GLTFLoader, characterPath); mixer = new THREE.AnimationMixer(scene); void mixer.clipAction(animations[0]).play(); // useFrame 훅 사용 useFrame((state, delta) => { mixer.update(delta); }); return <primitive object={scene} scale={scale} />; };
참고 자료
https://codesandbox.io/s/r3f-animation-mixer-forked-8mk4w5?file=/src/App.js728x90반응형'언어·프레임워크 > React.js' 카테고리의 다른 글
[React.js] React Router 적용 (0) 2024.02.06 [React.js] React-Toastify 적용 (0) 2024.02.02 [React.js] 네이버 지도 API: 시군구 폴리곤 적용과 폴리곤이 깨지는 이유 (1) 2023.12.04 [React.js] 웹 카메라 제어 : http에서 카메라 접근 안돼 ㅠ_ㅠ (0) 2023.10.12 [React.js] 웹 카메라 제어 : 사진 촬영 기능 위해 react-camera-pro 설치, Styled-Components도 필요! (0) 2023.10.12 다음글이 없습니다.이전글이 없습니다.댓글