fix: Pflichtoption controls an player.init übergeben
player.init wirft ohne controls einen TypeError, da CameraSystem und InputSystem intern auf controls.domElement/.target zugreifen (siehe three-player-controller/src/systems/CameraSystem.ts, three-player-controller/src/systems/InputSystem.ts). Eine OrbitControls-Instanz auf renderer.domElement schließt die Lücke; der Controller übernimmt die eigentliche Kamerasteuerung ohnehin selbst. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b27b9b7a61
commit
fbe9b18b5e
1 file changed
+4
-1
+4
-1
@@ -1,6 +1,7 @@
|
|||||||
import { ACESFilmicToneMapping, AmbientLight, DirectionalLight, Mesh, MeshStandardMaterial,
|
import { ACESFilmicToneMapping, AmbientLight, DirectionalLight, Mesh, MeshStandardMaterial,
|
||||||
PerspectiveCamera, PlaneGeometry, Scene, Timer, Vector3, WebGLRenderer } from "three";
|
PerspectiveCamera, PlaneGeometry, Scene, Timer, Vector3, WebGLRenderer } from "three";
|
||||||
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
|
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
|
||||||
|
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
||||||
import { playerController } from "three-player-controller";
|
import { playerController } from "three-player-controller";
|
||||||
|
|
||||||
const container = document.querySelector("#container");
|
const container = document.querySelector("#container");
|
||||||
@@ -13,6 +14,8 @@ renderer.shadowMap.enabled = true;
|
|||||||
container.appendChild(renderer.domElement);
|
container.appendChild(renderer.domElement);
|
||||||
|
|
||||||
const camera = new PerspectiveCamera(55, container.clientWidth / container.clientHeight, 0.1, 2500);
|
const camera = new PerspectiveCamera(55, container.clientWidth / container.clientHeight, 0.1, 2500);
|
||||||
|
// Pflichtoption für player.init: der Controller übernimmt die Kamera, braucht aber controls.domElement als Eingabeziel.
|
||||||
|
const controls = new OrbitControls(camera, renderer.domElement);
|
||||||
scene.add(new AmbientLight(0xffffff, 1.5));
|
scene.add(new AmbientLight(0xffffff, 1.5));
|
||||||
const sun = new DirectionalLight(0xffffff, 2);
|
const sun = new DirectionalLight(0xffffff, 2);
|
||||||
sun.position.set(60, 120, 40);
|
sun.position.set(60, 120, 40);
|
||||||
@@ -27,7 +30,7 @@ scene.add(ground);
|
|||||||
const gltf = await new GLTFLoader().loadAsync("./models/ual.glb");
|
const gltf = await new GLTFLoader().loadAsync("./models/ual.glb");
|
||||||
const player = new playerController();
|
const player = new playerController();
|
||||||
await player.init({
|
await player.init({
|
||||||
scene, camera,
|
scene, camera, controls,
|
||||||
colliders: [{ motion: "static", shape: { kind: "mesh", source: ground } }],
|
colliders: [{ motion: "static", shape: { kind: "mesh", source: ground } }],
|
||||||
initPos: new Vector3(0, 2, 0),
|
initPos: new Vector3(0, 2, 0),
|
||||||
playerModelConfig: {
|
playerModelConfig: {
|
||||||
|
|||||||
Reference in new issue
Block a user