前回の作業で隕石がランダムに飛んでくるようになりました。だいぶシューティングゲームらしくなってきましたが、今の状態だと自機が容易に画面外に飛んで行ってしまうのでまともに遊ぶことができません。
そこでここでは自機が画面外にはみ出ないようにひと工夫します。
自機が画面外に出ないようにする方法の選定
まず、プレイヤーキャラクターが画面外に出ないようにする方法はいくつかあるので、今回のゲームでどの方法を採用するかを決めようと思います。実装が簡単な候補としては次の2通りがあります。
- コライダーで自機を囲う方法
- カメラの範囲を取得して、プレイヤーの座標をクランプする方法
方法1はとてもシンプルなやり方で、コライダーで自機を囲って範囲外に出ないようにする方法です。プレイヤーの移動にリジッドボディを使っている場合は簡単に実装できます。
次に方法2は、カメラの範囲を取得してMathf.Clamp関数でプレイヤーの座標を制限する方法です。こちらは少し難しめですが、リジッドボディを使っていなくても使える堅実なやり方だと思います。
それで今回はどちらを採用しても良いと思ったのですが、両方試してみたところ
- プレイヤーの移動にリジッドボディを使っている
- Clamp関数で座標をクランプすると、境界に差し掛かった時に自機がガタつくことがあった
という観点から方法1を採用することにしました。以下ではコライダーで自機の移動を物理的に制限する方法をご紹介しますね。
なおゲームによっては方法2のほうがスマートな場合もあるので、興味がある方は方法2についても調べてみてください。
自機がはみ出ないようにするためのコライダーの作成
では早速ですが、自機がはみ出ないようにするためのコライダーを作ります。下の画像のようにBox Collider 2Dをアタッチした空のゲームオブジェクトを配置しましょう。
レイヤーと当たり判定の設定
ただしこのままでは弾や隕石までそのコライダーに当たってしまうので、プレイヤーだけがコライダーに当たるように設定を行う必要があります。
そこでまずプロジェクト設定ウィンドウを開き、「タグとレイヤー」タブの「レイヤー」の開いている欄(例では20番)に「Barrier」という名前のレイヤーを作ります。
そうしたら「2D物理」タブの「Layer Collision Matrix」を下の画像のように設定してください。
できたら先ほど作ったコライダーのゲームオブジェクトのレイヤーを「Barrier」に変更しましょう。これで自機だけが先ほどのコライダーに当たるようになるはずです。
テストプレイして動作を確認しよう
最後にテストプレイして、プレイヤーが画面外にはみ出ないようになっていれば成功です。一応弾や隕石がコライダーを通過できるかどうかも確認しておきましょう。
次のページ→ゲーム開始&ゲームオーバー処理の作り方