Unityで2Dの「Sandゲーム」というか「砂場」を作成してみます。ガチガチのゲームを作成するのではなく、大量のオブジェクトを扱うLow-level2DPhysicsの基本動作を確認する感じです。
はじめに
今回作成する「砂場」は大量のオブジェクトを扱うので、Low-level2DPhysicsを利用していきます。通常の物理エンジンでは大量のオブジェクトを扱うと動きが遅くなりますが、Low-level2DPhysicsを利用すると軽量なのだとか。
Unityのバージョン
今回は「Unity 6000.4.2f1」バージョン(Unity6.4)で作成していきます。Low-level2DPhysicsはUnity6.3以降で利用できます。
UnityHubから「新しいプロジェクト」を選択。テンプレートは「Universal 2D」を選択します。

作成開始
簡単な動作確認
Unityが起動したら、空のオブジェクトを追加してスクリプトを追加します。好きな名前で大丈夫です。

スクリプトの中身を下記に変更します。
using UnityEngine;
using UnityEngine.LowLevelPhysics2D;
public class Manager : MonoBehaviour
{
private void Start()
{
PhysicsWorld world = PhysicsWorld.defaultWorld;
PhysicsBody body = world.CreateBody();
body.CreateShape(CircleGeometry.defaultGeometry);
}
}
下記の様に画面に丸いのが一つ表示されたらOKです。

「LowLevelPhysics2D」はUnity6.5から「PhysicsCore2D」に変更されるので、下記の様な条件付きコンパイルにしておくと良いかも。
#if UNITY_6000_5_OR_NEWER using Unity.U2D.Physics; #else using UnityEngine.LowLevelPhysics2D; #endif
「CircleGeometry」を「PolygonGeometry」に変更すると形が四角になります。
// body.CreateShape(CircleGeometry.defaultGeometry);
body.CreateShape(PolygonGeometry.defaultGeometry);

下記が「CircleGeometry」の公式リファレンス
次に、スクリプトを下記の様に変更してみます。
using UnityEngine;
#if UNITY_6000_5_OR_NEWER
using Unity.U2D.Physics;
#else
using UnityEngine.LowLevelPhysics2D;
#endif
public class Manager : MonoBehaviour
{
private void Start()
{
PhysicsWorld world = PhysicsWorld.defaultWorld;
PhysicsBodyDefinition bodyDef = PhysicsBodyDefinition.defaultDefinition;
for (var i = -5; i < 5; i++)
{
bodyDef.position = new Vector2(i, 0);
PhysicsBody body = world.CreateBody(bodyDef);
body.CreateShape(CircleGeometry.defaultGeometry);
}
}
}
下記の様に10個表示されたらOK

「drawFillOptions」を指定すると塗りつぶすこともできます。
PhysicsWorld world = PhysicsWorld.defaultWorld;
world.drawFillOptions = PhysicsWorld.DrawFillOptions.Interior;

Part1は画面上に表示して簡単に動作を確認するまで。


