|  |  | 
 |  |  | // 添加场景相机 | 
 |  |  | import { useThree, PerspectiveCameraProps } from '@react-three/fiber'; | 
 |  |  | import React, { useState, useEffect } from 'react'; | 
 |  |  | import { useThree } from '@react-three/fiber'; | 
 |  |  | import { | 
 |  |  |     PerspectiveCamera, | 
 |  |  |     CameraControls, | 
 |  |  | 
 |  |  |     FirstPersonControls, | 
 |  |  |     MapControls, | 
 |  |  | } from '@react-three/drei'; | 
 |  |  | import React, { useState, useEffect } from 'react'; | 
 |  |  |  | 
 |  |  | const Camera = (props) => { | 
 |  |  |     const threeObj = useThree(); | 
 |  |  |     const camera = threeObj.camera; | 
 |  |  |  | 
 |  |  |     const [choiceCtrls, setChoiceCtrls] = useState(true); | 
 |  |  |     const mobxStore = useContext(ThreeStoreContext); | 
 |  |  |  | 
 |  |  |     const ctrl = () => { | 
 |  |  |         return ( | 
 |  |  |             <group> | 
 |  |  |                 {/* 相机控制器 */} | 
 |  |  |                 {/* <PresentationControls /> */} | 
 |  |  |                 <CameraControls /> | 
 |  |  |                 {/* <PointerCtrl /> */} | 
 |  |  |             </group> | 
 |  |  |         ); | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     const flyCtrl = () => { | 
 |  |  |         return ( | 
 |  |  | 
 |  |  |         ); | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     const ctrl = () => { | 
 |  |  |         return ( | 
 |  |  |             <group> | 
 |  |  |                 {/* 相机控制器 */} | 
 |  |  |                 {/* <PresentationControls /> */} | 
 |  |  |                 <CameraControls /> | 
 |  |  |                 {/* <PointerCtrl /> */} | 
 |  |  |             </group> | 
 |  |  |         ); | 
 |  |  |     }; | 
 |  |  |     return ( | 
 |  |  |         <> | 
 |  |  |             {choiceCtrls ? ctrl() : flyCtrl()} |