Simple-Physics-Engine(シンプル 2D 物理エンジン)

Library

概要

Simple-Physics-Engine は、C# で書かれた基本的な 2D 物理エンジンです。剛体(ボディ)に対する力の適用、重力、単純な衝突検出と衝突応答を実装し、固定タイムステップでの積分ループを提供します。目標は「学習しやすく、最低限の機能で物理挙動を試せる」ことにあり、複雑な最適化や高度な拘束条件は含まれていません。軽量プロトタイプや物理挙動の教育用途、ゲームエンジンの基礎実装のリファレンスとして有用です。

GitHub

リポジトリの統計情報

  • スター数: 16
  • フォーク数: 0
  • ウォッチャー数: 16
  • コミット数: 2
  • ファイル数: 12
  • メインの言語: C#

主な特徴

  • 基本的な剛体表現(位置・速度・質量・摩擦など)と力の適用
  • 固定タイムステップの積分ループ(学習用に単純化)
  • 基本的な衝突検出(形状は円や AABB 等を想定)とインパルスによる衝突応答
  • 軽量で読みやすいコード、学習・拡張しやすい構造

技術的なポイント

本エンジンは教育向けのシンプルさを重視しており、コアは「ボディ管理」「力と積分」「衝突検出/応答」の三層に分かれます。剛体は位置、速度、角速度、質量、慣性などの基本パラメータを持ち、外力やトルクを累積して毎フレーム更新します。数値積分は固定タイムステップで行い、実装上は単純オイラーまたは半暗示的オイラーを想定して安定性を確保します。衝突検出は簡易な幾何判定(円–円、AABB 等)を中心に実装され、接触点を算出した上でインパルス解法を適用して反発・摩擦を処理します。空間分割や加速構造(BVH、グリッド)は最小限で、スケーラビリティよりも可読性と拡張容易性を優先しています。そのためリアルタイムゲームでの高負荷シナリオには追加の最適化(広域検出の改善、連続衝突検知、拘束ソルバの導入など)が必要です。API はシンプルで、ボディの生成、属性設定、ワールドステップ呼び出しを行えばベーシックな物理シミュレーションが動作します。C# のプロジェクト構成に馴染むため、Unity 等の環境へ移植する際の参考実装としても使えますが、ユニット換算や座標系の扱いに注意が必要です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • 3DMazeGame.cs: file
  • 3DPlatformer.swift: file
  • EndlessRunner3D.rs: file
  • FirstPersonShooter.cpp: file

…他 7 ファイル

(補足)ファイル一覧を見ると多言語のサンプル名が含まれていますが、メイン実装は C# ファイル群にまとまっている想定です。サンプルやプレースホルダが混在している場合があるため、実際に利用する際はルートの C# 実装ファイル群と README を確認してください。

使い方(簡易)

  1. リポジトリをクローンして C# プロジェクトに追加する。
  2. ボディを作成して質量や形状を設定する。
  3. 毎フレームの更新でワールドステップ(固定タイムステップ)を呼び出す。
  4. 力や衝突パラメータ(反発、摩擦)を調整して挙動を確認する。

※README は非常に簡潔で、サンプルや詳細な API ドキュメントは限定的です。利用前にコードを直接読み、必要な拡張を行うことを推奨します。

まとめ

教育・プロトタイピング向けのシンプル実装で拡張しやすい基礎エンジンです。

リポジトリ情報:

READMEの抜粋:

Simple-Physics-Engine

A basic 2D physics engine. …