# threejs > Three.js 3Dゲーム・ビジュアライゼーション生成スキル。CDN + ES Modules形式でのコード生成、最新API (r170+) のベストプラクティス、非推奨APIの回避、物理エンジン(cannon-es/Rapier)連携、モバイルジョイスティック実装に対応。使用タイミング:(1) Three.jsを使った3Dゲームやビジュアライゼーションの生成、(2) 物理エンジンを使った動的なシーン、(3) モバイル対応のゲームコントローラー実装 - Author: notef - Repository: notef-neighbor/DreamCore-V2-sandbox - Version: 20260130191319 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/notef-neighbor/DreamCore-V2-sandbox - Web: https://mule.run/skillshub/@@notef-neighbor/DreamCore-V2-sandbox~threejs:20260130191319 --- --- name: threejs description: Three.js 3Dゲーム・ビジュアライゼーション生成スキル。CDN + ES Modules形式でのコード生成、最新API (r170+) のベストプラクティス、非推奨APIの回避、物理エンジン(cannon-es/Rapier)連携、モバイルジョイスティック実装に対応。使用タイミング:(1) Three.jsを使った3Dゲームやビジュアライゼーションの生成、(2) 物理エンジンを使った動的なシーン、(3) モバイル対応のゲームコントローラー実装 --- # Three.js Game Generation Skill DreamCore等のゲーム生成AIがThree.jsコードを生成する際のベストプラクティス。 ## 基本セットアップ (CDN + ES Modules) ```html ``` ## 重要: 最新APIパターン ### アニメーションループ ```javascript // ✅ 正しい(r170+) renderer.setAnimationLoop(animate); // ❌ 古い(動くが非推奨) function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate(); ``` ### カラースペース設定 ```javascript // ✅ 正しい(r152+) renderer.outputColorSpace = THREE.SRGBColorSpace; texture.colorSpace = THREE.SRGBColorSpace; // ❌ 削除済み(エラーになる) renderer.outputEncoding = THREE.sRGBEncoding; texture.encoding = THREE.sRGBEncoding; ``` ### リサイズ対応 ```javascript window.addEventListener('resize', () => { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); }); ``` ## よくある間違いと修正 | 間違い | 修正 | |--------|------| | `THREE.Geometry` | `THREE.BufferGeometry` (r125で削除) | | `face.vertexColors` | BufferAttribute使用 | | `THREE.CapsuleGeometry` | r142以降でのみ使用可 | | `material.encoding` | `material.colorSpace` | | `geometry.vertices` | `geometry.attributes.position` | ## 標準的なシーン構成 ```javascript // ライティング const ambientLight = new THREE.AmbientLight(0xffffff, 0.5); scene.add(ambientLight); const directionalLight = new THREE.DirectionalLight(0xffffff, 1); directionalLight.position.set(5, 10, 7); directionalLight.castShadow = true; scene.add(directionalLight); // 影の設定 renderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFSoftShadowMap; // 地面 const ground = new THREE.Mesh( new THREE.PlaneGeometry(20, 20), new THREE.MeshStandardMaterial({ color: 0x808080 }) ); ground.rotation.x = -Math.PI / 2; ground.receiveShadow = true; scene.add(ground); ``` ## アドオン読み込み ```javascript // Controls import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { PointerLockControls } from 'three/addons/controls/PointerLockControls.js'; // Loaders import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; import { FBXLoader } from 'three/addons/loaders/FBXLoader.js'; // Post Processing import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js'; ``` ## 参照ドキュメント 特定の機能が必要な場合は以下を参照: - **物理エンジン (cannon-es)**: [references/cannon-es.md](references/cannon-es.md) - メイン推奨 - **物理エンジン (Rapier)**: [references/rapier.md](references/rapier.md) - 高性能が必要な場合 - **モバイル入力**: `threejs-input` スキルを使用(ジョイスティック、ボタン、カメラ操作) - **非推奨API対応表**: [references/deprecated-apis.md](references/deprecated-apis.md)