INDIE INDEX

レベル:開発者向け

Box2D とは|商用でも無料で使える2Dの物理演算ライブラリ

公開 2026-09-12更新 2026-10-20Box2D

Box2D は、2Dゲームの中で物を現実に近い動きにするための剛体シミュレーションのライブラリです。無料で使えます。移植しやすい C17 で書かれています。

分類
ゲームエンジン・フレームワーク
日本語対応
日本語非対応
費用
無料
公式サイト
https://box2d.org/documentation/
このページの目次
  1. Box2D の概要
  2. Box2D の特徴
  3. Box2D の費用とライセンス
  4. 情報源

Box2D の概要

Box2D は、ゲームのための2Dの剛体シミュレーションのライブラリです。プログラマーは、ゲームの中で物を現実に近い動きにし、ゲームの世界をよりインタラクティブにするために使えます。

剛体とは

物体のどの2点の距離も変わらないほど硬い塊のことです。

ゲームエンジンの側から見ると、物理エンジンは手続きによるアニメーションの仕組みです。手引き(Manual)は Box2D 3.2.0 の版に対応していて、main ブランチの最新の版には必ずしも当てはまりません。

Box2D は、Game Developer Conference での物理のチュートリアルの一部として作られました。このチュートリアルは、box2d.org の publications(刊行物)の区画から入手できます。

Box2D の特徴

Box2D が扱う次元

Box2D は、ゲームのための2Dの物理エンジンです。

剛体のシミュレーションを使わない場合でも使える当たり判定の機能が、いくつも用意されています。重なりの問い合わせと、投げかけ(キャスト)の問い合わせの関数があります。また、ゲームごとの空間の整理に使える境界ボリューム階層(動的木)もあります。

Box2D の使用言語

Box2D は、移植しやすい C17 で書かれています。定義されている型の名前の多くは b2 で始まります。

Box2D は C で書かれているため、C プログラミングの経験があることが想定されています。コンパイル・リンク・デバッグに慣れていることも想定されています。

Box2D の中心の考え方

中心となる用語には、たとえば次のものがあります。

用語 中身
剛体(rigid body) どの2点の距離も変わらない、硬い塊
形(shape) 当たり判定の形を物体に結びつけ、密度・摩擦・反発などの材質の性質を足します。形を当たり判定の仕組み(broad-phase)に載せる役目も持ちます
拘束(constraint) 物体の自由度を取り除く物理的なつながり。2Dの物体は3つの自由度(2つの移動の座標と1つの回転の座標)を持ちます
接触の拘束(contact constraint) 剛体がめり込まないようにし、摩擦と反発を再現する特別な拘束。自分で作るのではなく Box2D が自動で作ります
関節の拘束(joint constraint) 2つの物体をつなぎ留める拘束。回転(revolute)・直動(prismatic)・距離(distance)などの型があり、制限・モーター・ばねのうち1つまたは複数を持つことがあります
世界(world) 物体・形・関節・接触が互いに作用し合う集まり。互いに完全に独立した世界を複数作れます
ソルバー 時間を進め、接触と関節の拘束を解く仕組み。拘束の数を N とすると、N のオーダーの時間で動きます

関節の制限は、関節の動ける範囲を限定します。たとえば、人の肘は決まった範囲の角度しか曲がりません。関節のモーターは、つながった物体の動きを関節の自由度に応じて駆動します。モーターは目標の速さと、最大の力またはトルクを持ちます。シミュレーションは、その速さにするのに必要な力またはトルクを加えます。関節のばねは、硬さと減衰を持ちます。Box2D ではばねの硬さをヘルツ(1秒あたりのサイクルの数)で表すので、物体の質量に関わらず、ばねの反応の速さを設定できます。減衰比では、ばねが静止するまでの速さを指定できます。

Box2D が標準で使える機能

機能のうち、当たり判定・物理・システムの区分には、たとえば次のようなものがあります。

区分 中身
当たり判定 連続的な当たり判定、接触の出来事、凸多角形・カプセル・円・角の丸い多角形・線分・鎖の形、1つの物体に複数の形、当たり判定の絞り込み(フィルタリング)、レイキャスト・シェイプキャスト・重なりの問い合わせ、センサーの仕組み
物理 Soft Step の剛体ソルバー、速い移動と回転のための連続的な物理、島(アイランド)ごとの休止、回転・直動・距離・モーター・溶接・車輪のジョイント、ジョイントの制限とモーターとばねと摩擦、ジョイントと接触の力、物体の移動の出来事と休止の通知
システム データ指向の設計、移植しやすい C17、マルチスレッドと SIMD、大きな世界のための倍精度のサポートなど

Box2D の連続的な当たり判定

ソルバーは、離散的な時間の刻みで物体を進めます。何もしないと、これが「すり抜け」(tunneling)を起こすことがあります。Box2D には、すり抜けに対処する専用のアルゴリズムがあります。1つめは、当たり判定のアルゴリズムが2つの物体の動きを補間して、最初に当たる時刻(TOI)を求めるものです。2つめは、物体が触れる前に接触の拘束を作る、投機的な当たり判定です。

Box2D の出来事の読み方

世界のシミュレーションを1ステップ進めると、そのステップの終わりに読める出来事が生まれます。出来事は次のとおりです。

  • 物体の移動の出来事
  • 接触の始まりと終わりの出来事
  • センサーの始まりと終わりの出来事
  • 接触の当たり(hit)の出来事
  • 関節の力とトルクのしきい値の出来事

Box2D の単位

Box2D は浮動小数点の数で動くため、許容の幅を使って、うまく動くようにしています。この許容の幅は、メートル・キログラム・秒(MKS)の単位でうまく動くように調整されています。とくに、動く形の大きさが 0.1〜10 メートルの範囲のとき、うまく動くように調整されています。

Box2D の動作環境

ライブラリと見本は、Windows・Linux・Mac で組み立てて動かせます。ライブラリを組み立てるには C17 に対応したコンパイラ、見本を組み立てるには C++20 に対応したコンパイラが必要です。Box2D は速度のために SSE2・AVX2・Neon(AArch64)の SIMD 演算を使っていて、BOX2D_DISABLE_SIMD を定義すると無効にできます。CPU が AVX2 に対応していないときは、SSE2 が自動で代わりに使われます。

見本のアプリ(samples)は、OpenGL と GLFW を使い、グラフィカルユーザーインターフェースに imgui を使っています。

include ディレクトリの中にあるものは公開されたもの、src ディレクトリの中にあるものは内部のものとして扱われます。公開されたものは支援の対象で、Discord サーバーで相談できます。内部のコードを直接使うことは支援の対象外です。

Box2D の費用とライセンス

Box2D は無料で使えます。Erin Catto が開発していて、MITライセンスです。

MITライセンスとは

ソフトウェアの写しを手に入れた人に、使用・複製・改変・統合・公開・配布・サブライセンス・販売(いずれかまたは複数)を含め、制限なくソフトウェアを扱う許可を、無償で与えるライセンスです。ライセンスの文にある著作権表示と許諾表示を、ソフトウェアの写しのすべて、または主要な部分に含める必要があります。ソフトウェアは「現状のまま」で提供され、明示・黙示を問わず、いかなる保証もありません。

項目 内容
費用 無料で使えます
ライセンス MITライセンスです
開発 Erin Catto が開発しています
言語 移植しやすい C17 で書かれています
動く環境 Windows・Linux・Mac で組み立てて動かせます
支援の仕組み GitHub Sponsors で開発を支援できます

プルリクエストを作れるのは共同作業者だけです。不具合または機能の要望の出し先は、GitHub の Issue です。

ソースコードは GitHub の erincatto/box2d にあります。組み立てでは、CMake と git を入れ、コマンドラインから動く状態にします。

ドキュメントは box2d.org にあります。GitHub のリポジトリのページには、手引き(Manual)と、コミュニティの Discord へのリンクがあります。

情報源

Box2D のページに出た言葉

Box2D と同じ分類のほかのツールゲームエンジン・フレームワーク 全62件

ゲームエンジン・フレームワークの一覧を見る

このページの内容の誤りは、問い合わせの窓口で受け付けています。