Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 7品質スコア 69/100

threejs-syntax-controls

Three.jsシーンにカメラコントロールを追加する際に使用します。軌道回転、パン、ズーム、飛行、一人称視点、オブジェクト操作に対応しています。render()ループ内でcontrols.update()の呼び出しを忘れたり、dispose()を呼び出さなかったり、複数のコントロールを混在させたりといった一般的なミスを防ぎます。OrbitControls、MapControls、FlyControls、PointerLockControls、TransformControlsに対応しています。

description の原文を見る

Use when adding camera controls to a Three.js scene: orbit, pan, zoom, fly, first-person, or object manipulation. Prevents the common mistake of forgetting controls.update() in the render loop, not calling dispose(), or mixing controls. Covers OrbitControls, MapControls, FlyControls, PointerLockControls, TransformControls. Keywords: OrbitControls, controls, camera controls, orbit, pan, zoom, MapControls, FlyControls, PointerLockControls, TransformControls.

SKILL.md 本文

threejs-syntax-controls

クイックリファレンス

コントロール選択の判断フロー

ユースケースコントロール理由
3Dモデルをあらゆる角度から検査するOrbitControlsターゲットポイント周辺の軌道回転/パン/ズーム
トップダウンマップまたは2DスタイルナビゲーションMapControls左ドラッグでパン、右ドラッグで回転
フリーフライトエディタまたは宇宙シーンFlyControls6自由度、WASD+マウス
ポインターロック付きのファーストパーソンゲームPointerLockControlsカーソルを隠す、マウス移動をキャプチャ
ポインターロックなしのファーストパーソンFirstPersonControlsブラウザロックAPIなしのマウスルック
ギズモを介してオブジェクトを移動/回転/スケールTransformControlsインタラクティブな変換/回転/スケールハンドル
オブジェクトを平面に沿ってドラッグDragControlsクリックアンドドラッグでオブジェクトを再配置
ジンバルロック制限なしの回転ArcballControlsアニメーション状態を持つ完全な球面回転
より単純なジンバルロック制限なし回転TrackballControlsOrbitControlsのようだがポール制約がない

インポートパス (Three.js r160+)

import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { MapControls } from 'three/addons/controls/MapControls.js';
import { FlyControls } from 'three/addons/controls/FlyControls.js';
import { FirstPersonControls } from 'three/addons/controls/FirstPersonControls.js';
import { PointerLockControls } from 'three/addons/controls/PointerLockControls.js';
import { TransformControls } from 'three/addons/controls/TransformControls.js';
import { TrackballControls } from 'three/addons/controls/TrackballControls.js';
import { ArcballControls } from 'three/addons/controls/ArcballControls.js';
import { DragControls } from 'three/addons/controls/DragControls.js';

必ず r160+ では 'three/addons/controls/...' を使用してください。レガシーパス 'three/examples/jsm/controls/...' はまだ動作しますが、非推奨です。

重要な警告

必ず enableDamping または autoRotatetrue のときはアニメーションループで controls.update() を呼び出してください。呼び出さないと、ユーザーインタラクションが終わった後カメラが凍結します。

必ず コントロールを削除するときに controls.dispose() を呼び出してください。呼び出さないとDOM イベントリスナー(pointermove、wheel、keydown)がメモリリークとゴーストインタラクションを引き起こします。

決して 同じカメラに2つのカメラコントロールクラスを同時にアタッチしないでください。同じカメラ上の OrbitControls + FlyControls は不規則な移動を引き起こします。

必ず TransformControls がドラッグ中は OrbitControls を無効にしてください。dragging-changed イベントをリッスンして orbitControls.enabled をトグルしてください。

必ず ユーザージェスチャー(クリックハンドラー)から PointerLockControls.lock() を呼び出してください。ブラウザはユーザーインタラクションなしのポインターロック要求を拒否します。

必ず FlyControls.update(delta)delta 時間を渡してください。引数を渡さないか経過時間を渡すと、速度がフレームレートに依存します。


コントロールライフサイクル

すべてのコントロールは同じライフサイクルパターンに従います:

構築 --> 設定 --> ループにアタッチ --> クリーンアップ時に破棄

ステップ1: 構築

const controls = new OrbitControls(camera, renderer.domElement);

必ず renderer.domElement を2番目の引数として渡してください。document または document.body を渡すとコントロールはグローバルにイベントをキャプチャして、UIオーバーレイが壊れます。

ステップ2: 設定

controls.enableDamping = true;
controls.dampingFactor = 0.05;
controls.minDistance = 2;
controls.maxDistance = 50;
controls.target.set(0, 1, 0);

ステップ3: レンダーループで更新

function animate() {
  requestAnimationFrame(animate);
  controls.update(); // enableDamping または autoRotate が true のとき必須
  renderer.render(scene, camera);
}
animate();

ステップ4: クリーンアップ時に破棄

controls.dispose();

OrbitControls

最も一般的に使用されるコントロール。ターゲットポイント周辺で軌道回転、パン、ズームを行います。

コンストラクタ

new OrbitControls(camera: THREE.Camera, domElement: HTMLElement)

主要なプロパティ

プロパティデフォルト説明
enabledbooleantrueすべてのインタラクションを有効/無効
targetVector3(0,0,0)軌道回転フォーカスポイント
enableDampingbooleanfalseスムーズな慣性移動
dampingFactornumber0.05慣性強度(0-1)
autoRotatebooleanfalseターゲットの周囲を自動回転
autoRotateSpeednumber2.0度数/秒(60fpsで)
enablePanbooleantrueパンを許可
enableRotatebooleantrue回転を許可
enableZoombooleantrueズームを許可
minDistancenumber0最小ズーム距離(PerspectiveCamera)
maxDistancenumberInfinity最大ズーム距離(PerspectiveCamera)
minZoomnumber0最小ズーム(OrthographicCamera)
maxZoomnumberInfinity最大ズーム(OrthographicCamera)
minPolarAnglenumber0最小垂直角(ラジアン)
maxPolarAnglenumberMath.PI最大垂直角(ラジアン)
minAzimuthAnglenumber-Infinity最小水平角(ラジアン)
maxAzimuthAnglenumberInfinity最大水平角(ラジアン)
screenSpacePanningbooleantrueスクリーン平面でパン(true)または水平面でパン(false)
zoomToCursorbooleanfalseカーソル位置に向かってズーム
panSpeednumber1.0パン速度乗数
rotateSpeednumber1.0回転速度乗数
zoomSpeednumber1.0ズーム速度乗数
mouseButtonsobject{LEFT: ROTATE, MIDDLE: DOLLY, RIGHT: PAN}マウスボタンマッピング
touchesobject{ONE: ROTATE, TWO: DOLLY_PAN}タッチジェスチャーマッピング
keysobject{LEFT, UP, RIGHT, BOTTOM}パン用矢印キーコード

メソッド

メソッドシグネチャ説明
update(deltaTime?)(number?) => booleanコントロール状態を更新。ダンピング/autoRotate時は毎フレーム呼び出し必須
dispose()() => voidすべてのイベントリスナーを削除
saveState()() => void現在のカメラ位置/ターゲット/ズームを保存
reset()() => void最後に保存した状態に復元
getDistance()() => numberカメラからターゲットまでの距離
getPolarAngle()() => numberラジアン単位の垂直角
getAzimuthalAngle()() => numberラジアン単位の水平角
listenToKeyEvents(el)(HTMLElement) => voidキーボードパンを有効化
stopListenToKeyEvents()() => voidキーボードパンを無効化

イベント

イベントトリガー
changeカメラ位置またはターゲットが変更された
startユーザーインタラクションが開始(pointerdown)
endユーザーインタラクションが終了(pointerup)

MapControls

トップダウンマップナビゲーション用に最適化された OrbitControls のサブクラス。

ボタンOrbitControlsMapControls
左マウス回転パン
中央マウスドーリードーリー
右マウスパン回転

すべてのプロパティ、メソッド、イベントは OrbitControls と同じです。唯一の違いはデフォルト mouseButtons マッピングと screenSpacePanning がデフォルトで true になることです。


FlyControls

6自由度フライトカメラ。移動はWASD、ロールはQE、上下はRFです。

主要なプロパティ

プロパティデフォルト説明
movementSpeednumber1.0移動速度
rollSpeednumber0.005ロール回転速度
dragToLookbooleanfalse回転するにはマウスドラッグが必須(常にマウス追従 vs.)
autoForwardbooleanfalse自動的に前方に移動

メソッド

  • update(delta) -- 必ず クロックから delta 時間を渡してください。この引数を省略したり経過時間を渡したりしないでください。
  • dispose() -- イベントリスナーを削除します。

PointerLockControls

Pointer Lock APIを使用するファーストパーソンカメラ。マウスカーソルを隠してキャプチャします。

主要なプロパティ

プロパティデフォルト説明
isLockedboolean読み取り専用ポインターが現在ロックされているかどうか
maxPolarAnglenumberMath.PI最大垂直ルック角
minPolarAnglenumber0最小垂直ルック角
pointerSpeednumber1.0マウス感度乗数

メソッド

メソッド説明
lock()ポインターロックをリクエスト(ユーザージェスチャーから呼び出し必須)
unlock()ポインターロックを終了
connect()イベントリスナーをアタッチ
disconnect()イベントリスナーを削除
dispose()完全クリーンアップ(disconnect を呼び出す)
getObject()制御されたカメラを返す
getDirection(target)ルック方向をターゲット Vector3 に書き込む
moveForward(distance)カメラを前方に移動
moveRight(distance)カメラを横方向に移動

イベント

イベントトリガー
changeカメラ方向が変更された
lockポインターロック取得
unlockポインターロック解放

必ず アニメーションループで独自の WASD 移動を実装してください。PointerLockControls はルック方向のみを処理し、位置は処理しません。


TransformControls

シーンオブジェクトの移動、回転、スケーリング用のインタラクティブギズモ。

主要なプロパティ

プロパティデフォルト説明
modestring'translate''translate''rotate'、または 'scale'
spacestring'world''world' または 'local' 座標空間
showXbooleantrueX軸ハンドルを表示
showYbooleantrueY軸ハンドルを表示
showZbooleantrueZ軸ハンドルを表示
sizenumber1ギズモの視覚的スケール
translationSnap`numbernull`null
rotationSnap`numbernull`null
scaleSnap`numbernull`null
draggingboolean読み取り専用ユーザーが現在ドラッグ中

メソッド

メソッド説明
attach(object)ギズモをシーンオブジェクトにアタッチ
detach()現在のオブジェクトからギズモを削除
setMode(mode)変換モードを設定
setSpace(space)座標空間を設定
setSize(size)ギズモスケールを設定
setTranslationSnap(snap)位置スナップを設定
setRotationSnap(snap)回転スナップを設定
setScaleSnap(snap)スケールスナップを設定
getRaycaster()内部レイキャスターにアクセス
dispose()クリーンアップ

イベント

イベントトリガー
changeギズモの視覚効果が変更された
dragging-changedドラッグ開始時 event.valuetrue、終了時は false
objectChangeアタッチされたオブジェクトの変換が変更された
mouseDownギズモ上でポインター押下
mouseUpギズモからポインター解放

重要な統合パターン

必ず ギズモドラッグ中はカメラコントロールを無効にしてください:

transformControls.addEventListener('dragging-changed', (event) => {
  orbitControls.enabled = !event.value;
});

必ず TransformControls をシーンに追加してください: scene.add(transformControls.getHelper()) または scene.add(transformControls)


簡単な概要: その他のコントロール

ArcballControls

アニメーション状態を持つ制約なしの回転。ポール角制限なし -- カメラはあらゆる方向に自由に回転します。CADスタイルのモデル検査に最適です。

TrackballControls

ポール角制約なしの OrbitControls のようなもの。カメラはポールを越えて回転できます。プロパティ: rotateSpeedzoomSpeedpanSpeedstaticMovingdynamicDampingFactor

DragControls

シーンオブジェクトを平面に沿ってドラッグします。コンストラクタ: new DragControls(objects, camera, domElement)。イベント: dragstartdragdragendhoveronhoveroff

FirstPersonControls

ポインターロックなしのマウスルックカメラ。プロパティ: movementSpeedlookSpeedactiveLookconstrainVerticalverticalMinverticalMax


リファレンスリンク

  • references/methods.md -- すべてのコントロールの完全なAPI署名
  • references/examples.md -- 各コントロールタイプの実装例
  • references/anti-patterns.md -- すべきではないこと

公式ソース

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
majiayu000
リポジトリ
majiayu000/claude-skill-registry-data
ライセンス
MIT
最終更新
2026/5/9

Source: https://github.com/majiayu000/claude-skill-registry-data / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: majiayu000 · majiayu000/claude-skill-registry-data · ライセンス: MIT