🧩 triggerFragmentation() で進捗を計算している部分

const rows = 12, cols = 12; // コメントは「4×4」だが実装は12×12 const pieceWidth = planeWidth / cols; const pieceHeight = planeHeight / rows; const distance = 100 + (Math.random() - 0.5) * 40; // 80〜120の範囲 const targetPos = originalPos.clone().add(direction.multiplyScalar(distance)); const targetRotation = new THREE.Euler( (Math.random() - 0.5) * Math.PI * 2, (Math.random() - 0.5) * Math.PI * 2, (Math.random() - 0.5) * Math.PI * 2 ); const duration = 10000; const startTime = performance.now(); function animateFragments() { const elapsed = performance.now() - startTime; const t = Math.min(elapsed / duration, 1); if (t < 0.5) { const progress = t / 0.08; // ★ ここで 0.5 / 0.08 = 6.25 mesh.position.lerpVectors(original, target, progress); } else { const progress = (t - 0.5) / 0.01; // ★ 0.51 / 0.01 ≒ 1 → 即戻る mesh.position.lerpVectors(target, original, progress); } }
ポイント
- グリッドは 12×12 = 144 断片。コメントの「4×4」と矛盾していた。
- 距離は 80〜120。距離が大きいほど飛び散りが派手になる。
- 進捗係数を 0.08 と 0.01 で割っているため、10秒設定でも 0.5 秒で6倍の外挿、その後0.51 秒で復帰してしまう。
- 動きは派手だが戻りが速すぎて余韻が消える。修正必須だと感じた。