Unity2Dで「砂場」を作成するPart3です。今回は砂を爆発したり(飛ばす)、砂の中にオブジェクトを生成してみます。
はじめに
Part1は下記から。
今回やること
パート1ではLow-level2DPhysics(PhysicsCore2D)の簡単な動作確認、パート2では砂場の作成を行いました。
パート3の今回は「砂を爆破(飛ばす)」、「砂場の中にオブジェクトの生成」を実装していきます。
作成開始
砂の爆破で飛ばす(Explode)
下記スクリプトを追加します。マウスでクリックした位置に「範囲内の全ての物体に対して、遠ざかる方向に衝撃を与える爆発」を実装しています。
[SerializeField] private Camera _cam;
private void Update()
{
if (Mouse.current.leftButton.isPressed)
{
Vector2 mousePos = _cam.ScreenToWorldPoint(Mouse.current.position.ReadValue());
var explodeDef = new PhysicsWorld.ExplosionDefinition
{ position = mousePos, radius = 0.2f, falloff = 0.5f, impulsePerLength = 0.2f };
World.Explode(explodeDef);
}
}
パラメータにカメラをセットします。

マウスでクリックすると爆発で砂を飛ばします。

パラメータを変えることで範囲などを変更することできます。
オブジェクトの生成
砂場の中にオブジェクトを生成してみます。スクリプトの爆発で追加した部分を削除して下記に変更します。
private void Update()
{
if (Mouse.current.leftButton.wasPressedThisFrame)
{
Vector2 mousePos = _cam.ScreenToWorldPoint(Mouse.current.position.ReadValue());
var geometry = PolygonGeometry.CreateBox(size: new Vector2(1f, 1f));
var body = World.CreateBody(new PhysicsBodyDefinition
{ type = PhysicsBody.BodyType.Dynamic, position = mousePos });
body.CreateShape(geometry);
}
}
実行してマウスをクリックすると下記の様にオブジェクトを生成できます。

オブジェクトを一つ生成して、それをマウス位置に移動する場合は下記の様なスクリプト。
private PhysicsBody m_body;
private void Start()
{
var geometry = PolygonGeometry.CreateBox(size: new Vector2(1f, 1f));
m_body = World.CreateBody(new PhysicsBodyDefinition
{ type = PhysicsBody.BodyType.Dynamic, position = new Vector2(5f, 3f) });
m_body.CreateShape(geometry);
}
private void Update()
{
if (Mouse.current.leftButton.wasPressedThisFrame)
{
Vector2 mousePos = _cam.ScreenToWorldPoint(Mouse.current.position.ReadValue());
m_body.transform = mousePos;
}
}

LowLevelPhysics2D(U2D.Physics)は他にも多くの事が出来ます。今回は基本的な機能を利用して砂場を作成してみました。

