TopDownEngine KoalaDungeon のマップの仕組み(3)

前回は、Unity のアセット TopDown Engine のサンプルゲームの一つ KoalaDungeonマップ表示するための基本のコンポーネント TilemapTilemapRenderer を紹介しました。

Unity Grid と Tilemap 群の関係

Unity Grid と Tilemap 群の関係

今回は、タイルマップの種類ごとの特有のコンポーネント紹介します。
※ Unity は 2021.3.14f1、TopDown Engine は 3.1.1 です。

各タイルマップ特有のコンポーネント

Ground タイルマップ

通行可能な床を配置するタイルマップです。

TilemapCollider2D コンポーネント

TimemapCollider2D コンポーネントはタイルマップに対応したコライダーです。

同じゲームオブジェクトに付加されている Timemap コンポーネントのタイル群の配置情報からコライダー形状を作ります。
Tilemap コンポーネントでタイルの変更があった場合は、バッチ処理により効率よく更新します。

KoalaDungeon Ground の TilemapCollider2D コンポーネント

KoalaDungeon Ground の TilemapCollider2D コンポーネント

Used By Compositeチェックがある場合、 Offset プロパティを除き、全ての制御CompositeCollider2D コンポーネントに渡します。

詳しくは「Tilemap Collider 2D – Unity マニュアル」を参照してください。

Rigidbody2D コンポーネント

物理挙動を実現するコンポーネントです。 2D 版2 次元の移動と、その平面に垂直な方向への回転に制限されます。
また Collider2D コンポーネントがアタッチされている場合、衝突時の双方のコライダーの接点や動きを伝達します。
今回は出てきませんが Joint2D コンポーネントの物理的シミュレーションにも関係しています。

KoalaDungeon Ground の RigidBody2D コンポーネント

KoalaDungeon Ground の RigidBody2D コンポーネント

BodyType プロパティが Static な場合、基本的に動かないゲームオブジェクトであることを示します。
Simulated
 プロパティが有効な場合、 Collider2D, Joint2D コンポーネントを物理シミュレーションと相互作用させます。
無効にすると物理シミュレーションが行われないので、 Collider2D をつけていても衝突/トリガー判定通知されなくなります。

詳しくは「Rigidbody 2D – Unity マニュアル」を参照してください。

衝突判定とトリガー判定の条件

二つのゲームオブジェクトの衝突判定により OnCollisionEnter2D イベント関数などが呼ばれるには次の条件を満たします。

  • 少なくとも一方Rigidbody2D コンポーネント (Simlated = true) を付加している。
  • どちらも Collider2D 派生コンポーネントを付加している。
  • isTrigger プロパティどちらも false に設定されている。

衝突判定では、ぶつかった際にお互いの移動方向が変わるなどの物理挙動が演算されます。

isTrigger プロパティを有効にすると、衝突判定ではなく、トリガー判定となり、お互いのコライダーの領域の一部または全部が重なっていることを通知するだけになります。
ゴール地点にたどり着いたら、次のステージに移動などの処理では、トリガー判定を使うと良いでしょう。

二つのゲームオブジェクトのトリガー判定により OnTriggerEnter2D イベント関数などが呼ばれるには次の条件を満たします。

  • 少なくとも一方Rigidbody2D コンポーネント (Simlated = true) を付加している。
  • どちらも Collider2D 派生コンポーネントを付加している。
  • isTrigger プロパティトリガー判定を受けたい側(片方または両方)true に設定されている。

衝突判定と最初の 2 つの条件は同じですが、3 つめの isTrigger の設定は片側だけ true にしても、 true にしたほうのトリガー判定イベント関数が呼び出されます。

CompositeCollider2D コンポーネント

複数のコライダーの形状合成して衝突/トリガー判定を制御します。

BoxCollider2D, PolygonCollider2D, TilemapCollider2D などが持つ Used By Composite プロパティtrue が設定されているコライダー群が合成の対象です

KoalaDungeon Ground の CompositeCollider2D コンポーネント

KoalaDungeon Ground の CompositeCollider2D コンポーネント

GeometryType プロパティPolygons の場合は、合成したコライダー形状はポリゴンで表されます。
PolygonCollider2D コンポーネントのように複雑な形をしているものに向いています。

Ground は移動可能な床を表すので、壁によりたくさん仕切られている場合複雑な形になるためポリゴンのほうが向いているようです。

Unity CompositeCollider2D の Polygons によるコライダー形状

Unity CompositeCollider2D の Polygons によるコライダー形状

GeometryType プロパティOutlines の場合は、コライダー群の重なりに応じたアウトラインで表されます。
EdgeCollider2D コンポーネントのように線分の組み合わせで表され、ポリゴンと異なり領域が閉じている必要はありません

詳しくは「Composite Collider 2D – Unity マニュアル」を参照してください。

GroundDecoration タイルマップ

Ground タイルマップの床に装飾(サンプルでは赤いじゅうたんをのせていました)をほどこすタイルレイヤーです。
よく見るとじゅんたんの角に隙間があり、そこに同じ位置の床のタイルが重なって表示されています。

KoalaDungeon の GroundDecoration タイルマップでは床の上に絨毯をのせていて、絨毯の隙間から床が少し見えます。

KoalaDungeon の GroundDecoration タイルマップでは床の上に絨毯をのせていて、絨毯の隙間から床が少し見えます。

特有のコンポーネントはありませんでした。

Walls タイルマップ

通行不可能な壁を配置するタイルレイヤーです。

TilemapCollider2D, Rigidbody2D コンポーネントは Ground と同じ

TilemapCollider2D, Rigidbody2D コンポーネントの設定は Ground と同じでした。

KoalaDungeon Walls の TilemapCollider2D コンポーネント

KoalaDungeon Walls の TilemapCollider2D コンポーネント

KoalaDungeon Walls の Rigidbody2D コンポーネント

KoalaDungeon Walls の Rigidbody2D コンポーネント

CompositeCollider2D コンポーネント

コンポーネント 3 つの構成は Ground タイルマップと同じです。
違いは、CompositeCollider2D コンポーネントの Geometry Type プロパティです。
Ground では Polygons でしたが、 Walls タイルマップでは Outlines が指定され、後続のパラメータの内容も一部異なります。
Ground で説明した通り、 Outlines を選ぶと EdgeCollider2D のような連続した複数の線分を用いて、対象のコライダー群のアウトラインをコライダー形状として合成します。

KoalaDungeon Walls の CompositeCollider2D コンポーネント

KoalaDungeon Walls の CompositeCollider2D コンポーネント

Ground と比べて Walls は直線的な形状が多くOutlines のほうが適しているようです。

Unity CompositeCollider2D の Outlines によるコライダー形状

Unity CompositeCollider2D の Outlines によるコライダー形状

今回はここまで

意外と話が長くなってきたので Grid 直下にあるまだ紹介していない WallsShadow, Holes タイルマップ、 Props ゲームオブジェクトの説明は、次回行います。

参照サイト Thank You!

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました