はじめに
Unityではこれまで、 標準で用意されているPhysXベースの物理エンジンを使うことが一般的だった
Unity6.3Betaでは、2D物理演算向けのパッケージ「Low-level 2D Physics」が追加された
これは、Box2DというC言語で記載された物理エンジンをベースとしたパッケージで、軽量で拡張性の高いことが特徴
Low-level 2D Physicsでは、サンプルプロジェクトが配布されている
また、この中で実装されているシーンについてはYoutubeに投稿されている
Low-level 2D Physicsの主な特徴
- GameObjectやコンポーネントとは完全に独立した物理演算
- GameObjectと連携するための豊富なサポート
- XY, XZ, ZYといった複数の平面軸をサポート
- Worldと呼ばれる独立した物理空間があり、それぞれが並列にシミュレーション可能
- APIのほとんどがメインスレッド外のC# Jobから呼び出すことができる
- デバッグ描画システムを搭載
Low-level 2D Physicsを始めたい
自分がこれで遊ぼうとしたとき、日本語のドキュメントや記事が少なくどこから読むべきか困ったので、よさげなロードマップを書いておく
1. 「Latest Sandbox (Full Play) in 6000.3.0a5.」を見たり、サンプルで提供されているWebGLからどのようなことが実現可能かを把握する
2. PhysicsExamples2Dリポジトリ/LowLevel/Primer/Overview.mdを理解する
このパッケージの全体像が記載されている
3. PhysicsExamples2Dリポジトリ/LowLevel/PrimerプロジェクトをUnityで開き、用意されたシーンを理解していく
「01 - CreatePhysicsWorld」シーンから順番に、どのように実装されているかを見ていく
基本的に、1シーン1スクリプトで構成されているので、そのスクリプトを読めば十分理解できる
また、Assets/下にシーンごとの追加の説明が1行づつぐらい記載されているので、理解の助けになるかもしれない
スクリプトにはコメントが豊富に書かれているので十分読めると思う
自分は日本語でコメントを読みたかったので、以下のようにAIへ翻訳させた
private void Start()
{
// Create a world.
// ワールドを作成
// While the "world" struct returned only contains a handle to the actual world instance created,
// 返される「world」構造体は、作成された実際のワールドインスタンスへのハンドルのみを含みますが、
// it can be used in an object-orientated way and has properties and methods which can be used directly.
// オブジェクト指向的に使用でき、直接使用できるプロパティとメソッドを持っています。
m_PhysicsWorld = PhysicsWorld.defaultWorld;
// Log the world ID.
// ワールドIDをログに出力
Debug.Log(m_PhysicsWorld);
}
4. PhysicsExamples2Dリポジトリ/LowLevel/SandboxプロジェクトをUnityで開き、Batching/Shooterを理解する
Sandboxでは多くのサンプルシーンが提供されているが、一番最初のおすすめはBatching/Shooterシーン
このシーンでは、複数のオブジェクトを同時に管理, 生成するためにBatchの概念を使用している
Low-level 2D Physicsを使うからにはいっぱいオブジェクトを表示したいと思うので、まずはこのシーンでどのように大量のオブジェクトを生成するかを学ぶ
world.CreateBodyBatchとPhysicsBody.DestroyBatchの使い方を学べたらバッチリ
あとは、シーン上に配置されているScene Slider JoiintやScene Hinge Jointを自分で複製したりして遊ぶと理解できると思う
5. Collision/CharacterMoverを理解する
次に、物理空間でキャラクターを動かすことができるCollision/CharacterMoverがおすすめ
キャラクターの移動と衝突判定をどのように実装しているかを確認できる
キャラクターを全て物理エンジン任せではなく、一部を自前の速度計算で制御しているところがポイント
また、PhysicsQueryによるレイキャストベースの接触判定などが学べる
特に PhysicsQuery.WorldMoverInputは引数が多く色々遊べる
6. 好き放題やる
ここまで来れば、あとは自分でマリオを作るもよし、弾幕ゲーを作るもよし、楽しむだけ
終わりに
Low-level 2D Physics は、Unity 6.3 で導入されたばかりの新しい仕組みだが、中身は長い歴史を持つ Box2D の思想に基づいており、軽量・明確・拡張性の高さが魅力
非常に遊べるパッケージなので、これを使って何かゲームを完成させたいな![]()