#javascript #three.js #react-three-fiber
Вопрос:
У меня есть объект .glb, который выполняет анимацию ключевых кадров. Я импортировал этот объект в свои три JS-сцены, и все работает нормально. Но мне нужно вращение сетки и изменение положения, которые происходят в анимации. В любом случае, их свойства меняются во время воспроизведения анимации (и они движутся). Вот мой код:
import React, { forwardRef, useEffect, useRef, } from "react"; import * as THREE from "three"; import { useFrame } from "@react-three/fiber"; import { useGLTF, useAnimations } from "@react-three/drei"; export default forwardRef(({ ...props }, plane) =gt; { const { nodes, materials, animations } = useGLTF("/plane.glb"); const { actions } = useAnimations(animations, plane); const topR = useRef(); useEffect(() =gt; { if (plane.current !== null) { const { fold } = actions; fold.repetitions = 1; fold.clampWhenFinished = true; fold.play(); } }, [topR.current]); useFrame(() =gt; { if (actions.fold.isRunning()) { if (topR.current) { console.log(topR.current.rotation); console.log(topR.current.position); //THEY DO NOT CHANGE FROM THE ANIMATION } } }); return ( lt;group layers={2} scale={[8, 8, 8]} ref={plane} {...props} dispose={null} gt; lt;mesh name="topR" ref={topR} layers={2} geometry={nodes.topR.geometry} material={nodes.topR.material} morphTargetDictionary={nodes.topR.morphTargetDictionary} morphTargetInfluences={nodes.topR.morphTargetInfluences} gt; lt;meshStandardMaterial {...materials} metalness={0} roughness={0.8} side={THREE.DoubleSide} shadowSide={THREE.DoubleSide} /gt; lt;/meshgt; lt;mesh lt;/groupgt; ); }); useGLTF.preload("/plane.glb");
Ответ №1:
пробовать :
if (topR.current) { console.log(topR.current.camera.rotation); console.log(topR.current.camera.position); console.log(topR.current); }
осмотрите topR.current
, вы можете увидеть, что меняется, и все такое.