ぬるーむ

Unity初心者が誰もが知っているゲームの模倣をしています。個人的な備忘録ですが、入門書を読み終えたばかりの初心者の方は「こんなへなちょこでもいいのか!」「俺の方がうまく作れる」と作成意欲がわいたりするかもしれません。

Unityによるパックマンの作り方 ~半自動でBoxCollider2Dをセット~


スポンサードリンク

BoxCollider2Dに必要な中心座標、サイズをを取得したいが、直接迷路の画像から取得するのは難しい。なので、まずデータ取得用の画像(ColliderMap)を作成し、そこから必要なデータを取得するようにします。この取得したデータをもとに迷路の画像にBoxCollider2Dをアタッチします。

ColliderMapの作成

ここではClipStudioを使用していますが、下記の機能が使えるものなら何でもよいです。

  • ベクターレイヤー。
  • グリッドの表示、グリッドにスナップ。

迷路の画像のレイヤーの上からBoxCollider2Dの半分の大きさの短形を描いていきます。ベクターレイヤーで矩形をブラシサイズ1pxで描画し、ラスターレイヤーで適当な色で塗りつぶしていきます。このとき、適当なサイズでグリッドを表示し、グリッドにスナップするようにしておくと楽です。

f:id:Nullsuke:20210501152714g:plain
ColliderMapの描画
f:id:Nullsuke:20210502231835p:plain
ColliderMap

BoxCollider2Dそのものの短形にしないは、BoxCollider2Dが隣接しているとうまく座標を取得できないからです。

作成した画像はRead/Write Enableを有効にしておくこと。そうしないとスクリプトから画像を読み込めません。

f:id:Nullsuke:20210502092252p:plain
ColliderMapの設定

ColliderMapから矩形を取得

以下の手順で矩形を取得していきます。

  1. ColliderMapをTexture2Dとして読み込ます。
  2. 原点(左下)から水平方向に、連続してある不透明な(α値が0でない)点を取得します。
  3. 垂直方向に、2で取得した直線と同じ長さの不透明な直線があるか精査し、あれば取得します。
  4. 2, 3を精査済みの点を飛ばしながら繰り返します。

MazeUtilityクラスでColliderMapの読み込み、精査、矩形の取得をします。取得した矩形をRectangleクラスで保存します。

BoxCollider2Dをアタッチ

MazeオブジェクトにMazeUtilityをアタッチし、ColliderMapをセットします。Mazeオブジェクトが読み込まれたときBoxCollider2Dをアタッチするようにします。

f:id:Nullsuke:20210505105258p:plain
Mazeオブジェクト(余計なものがいろいろついてますが気にしないでください)

MazeUtilityで得た矩形は必要な矩形の半分の大きさなので2倍した値を使います。また、迷路の画像はPixels Per Unitを8pxにしているので8で割ります。