Tengo algunas dificultades para que mi cámara siga un objeto. El objeto está usando un gancho useSphere de @react-three/cannon. Mi esfera se mueve bien, pero la cámara no la sigue. Lo reduje hasta que la posición de mi esfera no se actualiza porque matrixAutoUpdate se establece en falso. No estoy seguro de por qué sucede esto porque en otros ejemplos de Cannon que probé matrixAutoUpdate sigue siendo cierto. Cualquier idea sería increíble, he estado atascado por un tiempo y no puedo encontrar nada en Internet. A continuación se muestra un código
import React from "react"; import {useFrame, useThree} from "@react-three/fiber"; import {useKeyboardControls} from "../hooks/useKeyboardControls"; import {FPVControls} from "./FPVControls"; import {Vector3} from "three"; import {useSphere} from "@react-three/cannon"; const SPEED = 6 export const Player = (props) => { const {camera} = useThree() //sphere movement controls const { moveForward, moveBackward, moveLeft, moveRight, jump } = useKeyboardControls() const [ref, api] = useSphere(() => ({ mass: 1, type: 'Dynamic', ...props })) useFrame(() => { camera.position.copy(ref.current.position) const direction = new Vector3() const frontVector = new Vector3( 0, 0, (moveBackward ? 1 : 0) - (moveForward ? 1 : 0) ) const sideVector = new Vector3( (moveLeft ? 1 : 0) - (moveRight ? 1 : 0), 0, 0 ) direction .subVectors(frontVector, sideVector) .normalize() .multiplyScalar(SPEED) .applyEuler(camera.rotation) api.velocity.set(direction.x, 0, direction.z) }) console.log("ref position", ref) return ( <> <FPVControls/> <mesh ref={ref}> <sphereGeometry /> <meshStandardMaterial color={"#f30707"} /> </mesh> </> ) }Encontré esto útil en un problema similar, tal vez pueda ayudarlo:
una conversación sobre un tema similar
Este problema similar se trata de una posición que no se actualiza mediante el uso de ganchos de cañón, la clave es suscribirse a la posición de API y almacenarla en una referencia según lo que entendí.
Aquí hay un ejemplo más preciso en el componente AI (línea 69, puede encontrar la referencia en la línea 79):