ぬるーむ

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

Unityによるパックマンの作り方 ~パックマンの作成~


スポンサードリンク

仕様はいたってシンプルです。

  • キーを押したら障害物にぶつかるまで進み続ける。
  • 移動中にキーを押すと、その方向に移動できるようになったとき自動的にその方向に進む。
  • ワープ地点に来たら反対側にワープする。
  • エサ、パワーエサ、フルーツ、怯えた状態のゴーストを食べる。
  • 通常状態のゴーストに食べられる。

Pacmanオブジェクトの作成

16px × 16pxの画像を用意し、Pixels Per Unitを8にします。画像はUnityのSprite Packerを使って1つの画像にまとめるとゲーム起動時の負荷が減ります。

f:id:Nullsuke:20210504105158p:plain
Sprite画像

画像からSpriteを作成し、Rigidbody2D、CirlceCollider2Dをアタッチします。適当にColliderの大きさを設定します。

f:id:Nullsuke:20210504105225p:plain
Pacmanオブジェクト

Pacmanクラスの作成

移動

当たり判定

Physics2D.Linecastを使います。この関数の引数はグローバル座標なので注意してください。

フレームごとの移動

Vector2.MoveTowardsを使い現在座標、目標座標、移動速度からフレーム毎の移動座標を求め、Rigid2D.MovePositionで移動させます。

目標座標に限りなく近づいたら壁との当たり判定を行い、判定が偽の場合移動します。

また、キー入力もここで行います。

ワープ

パックマンの現在地をWarpPointの出口にし、進行方向を1つ先に設定するだけです。継承したIWarpable.Warpに実装し、WarpPointに接触したら実行するようにします。

食べる

パックマンが食べることができるもの(エサ、パワーエサ、恐慌状態のゴースト、フルーツ)にIEatableインターフェイスを継承します。食べたときの動作は食べられる側で実装します。パックマン側はOnTriggerEnter2DでIEatable.Eatenを実行するだけです。

アニメーション

上下左右の移動と死亡時のアニメーションを作成します。 すべてのアニメーションはAny Stateから遷移するようにします。 Animation ControllerのParametersに以下の変数を作成します。

  • float DirX
  • float DirY
  • bool isDead

f:id:Nullsuke:20210503101958p:plain
Animation Controller

遷移の条件は以下の通りです。また、Can Transition To Selfは必ずオフにしておきましょう。

  • Up:DirY > 0.1 & isDead == false
  • Right:DirX > 0.1 & isDead == false
  • Down:DirY < -0.1 & isDead == false
  • Left:DirX < -0.1 & isDead == false
  • Dead: isDead == true

f:id:Nullsuke:20210503103402p:plain
UpへのTransition

死亡のアニメション終了と同時に自身を削除するようにしておきます。

f:id:Nullsuke:20210503103855p:plain
死亡のアニメーション終了後の設定

移動時に、DirXとDirYにパックマンの進行方向を代入します。

死亡時に、IsDeadを真にします。

完成

PacmanオブジェクトにAnimator、Pacmanクラスをアタッチします。適当にSpeedを設定します。

f:id:Nullsuke:20210504105403p:plain
Pacmanオブジェクト

毎フレーム、MoveとAnimateを実行させます。

nullsuke.com

上記で作成した迷路上にパックマンをセットすれば完成です。パックマンの初期位置は必ず整数にしてください。そうしないと、移動中に引っかかってしまいます。

f:id:Nullsuke:20210503133733g:plain
パックマン(キャラのみ)の完成