Three.js user interaction — camera controls (OrbitControls, FirstPersonControls, PointerLockControls, FlyControls, MapControls), raycasting for click and hover detection, TransformControls, DragControls, SelectionBox, keyboard input, and touch handling. Use when implementing player input, object picking, camera movement, or any user-driven 3D interaction. Adapted from CloudAI-X/threejs-skills (MIT).
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Three.js user interaction — camera controls (OrbitControls, FirstPersonControls, PointerLockControls, FlyControls, MapControls), raycasting for click and hover detection, TransformControls, DragControls, SelectionBox, keyboard input, and touch handling. Use when implementing player input, object picking, camera movement, or any user-driven 3D interaction. Adapted from CloudAI-X/threejs-skills (MIT).
license
MIT
compatibility
Portable reference skill for agents that support markdown skills or prompt files. Works best alongside project Three.js source files. Requires three/addons controls from the same Three.js version.
disable-model-invocation
true
metadata
{"owner":"game-delivery","version":"2.0.0","language":"en-GB","category":"web-rendering","upstream_references":["https://github.com/CloudAI-X/threejs-skills (MIT — see NOTICE.md)"],"tags":["three-js","interaction","raycasting","camera-controls","orbit-controls","pointer-lock","input","game-input"],"intents":["camera-controls","raycasting","object-picking","transform-gizmos","keyboard-input","touch-input"],"output_types":["code-example","api-reference","input-scheme"]}
// Only test objects on layer 1
raycaster.layers.set(1);
interactiveObject.layers.enable(1);
nonInteractiveObject.layers.disable(1); // On layer 0 (default)
Invisible Collision Meshes
// Use a simpler mesh for raycasting, hide the visual mesh's detailconst collider = newTHREE.Mesh(
newTHREE.BoxGeometry(1, 1, 1), // Simple shapenewTHREE.MeshBasicMaterial({ visible: false }),
);
collider.userData.isCollider = true;
scene.add(collider);
const intersects = raycaster.intersectObjects([collider]);
TransformControls — Move/Rotate/Scale Gizmo
import { TransformControls } from'three/addons/controls/TransformControls.js';
const transformControls = newTransformControls(camera, renderer.domElement);
scene.add(transformControls);
// Attach to a selected object
transformControls.attach(selectedObject);
// Switch mode
transformControls.setMode('translate'); // 'translate', 'rotate', 'scale'// Snapping
transformControls.setTranslationSnap(0.5); // Snap to 0.5-unit grid
transformControls.setRotationSnap(THREE.MathUtils.degToRad(15));
transformControls.setScaleSnap(0.1);
// Coordinate space
transformControls.setSpace('world'); // 'world' or 'local'// Detach when done
transformControls.detach();
// Prevent OrbitControls from interfering while using TransformControls
transformControls.addEventListener('dragging-changed', event => {
orbitControls.enabled = !event.value;
});
// Listen for changes
transformControls.addEventListener('objectChange', () => {
console.log('Position:', selectedObject.position);
});