Unity 5で 2Dシューティングのチュートリアルを行う際の注意点(第09回)
Unity公式チュートリアル 2Dシューティング
第09回 プレイヤーの移動制限と様々な修正
上記チュートリアルで、私がつまずいたところ、初心者がつまずきそうなところをピックアップして解説します。
9.1 プレイヤーに移動制限つける
今のままではプレイヤーは画面外へ移動できてしまいます。これを画面内のみ移動できるようにしましょう。
今回は移動の制限にカメラのビューポートとMathf.Clampを使用します。
これから実装するプレイヤーの移動制限はゲームの画面サイズが600x450でなければうまく動作しません。もう一度正しく設定されているか確認しましょう。
ここは画像の通りチェックできるはずです。
Gameタブのすぐ下にある画面サイズが「Web (600x450)」になっていることを確認しましょう。
もしなっていなければ、修正しておきましょう。
DestroyAreaの範囲を修正する
DestroyAreaの範囲を背景やカメラの表示範囲と同じにします。Box Collider 2DのSizeを X 8 Y 6にします。
Hierarchyタブの DestroyAreaを選択し、表示されるInspectorの Box Collider 2D内にある Size値を編集します。
プレイヤーの移動方法を変更
ここでプレイヤーの移動方法を変更します。
プレイヤーの移動制限を行うのにMathf.Clampを使用しますが、これはtransform.positionの位置情報を使用して制限を行います。
ですが自動で位置情報を更新する物理挙動(今回はrigidbody2D.velocity)とMathf.Clampでの移動制限を行うと、不都合なことが起こります。
それは、物理挙動によって移動した後に移動制限をかけなければいけないということです。つまり一度移動範囲外に出た後、範囲内に強制的に移動する事になります。
その状態を確認してみましょう。
Player.csに移動制限のコードを追加します(Clampメソッド)
Projectタブの Scripts配下にある Playerをダブルクリックし、MonoDevelopで Player.csを編集します。
ソースの中身はまるごと置き換えて問題ありません。
置換後、Ctrl+Sで保存したら、Unity画面に戻りましょう。
ダイアログが表示されるので、「Go Ahead!」をクリックし、ソースを修正させましょう。
変更点は以下の通りです。
・Update関数内で、移動処理後に Clamp関数呼び出しを追加
・Clamp関数を新規実装、ここでプレイヤーの座標をチェックし、移動制限をかけている
この状態で、ゲームを再生して画面端に移動してみてください。プレイヤーが削除されるはずです。
図9.2は画面端(-4,-3)に移動した時の画像です。本来であればプレイヤーのコライダーはDestroyAreaのコライダー内に含まれているのでOnTriggerExit2Dは呼ばれないはずですが、呼ばれてしまいます。これは、DeastoryAreaのコライダー外に移動してしまっている事になります。
図9.2:
そこで、プレイヤーの移動はrigidbody2D.velocityを使用せず、transform.positionのみで行うようにします。
Projectタブの Scripts配下にある Playerをダブルクリックし、MonoDevelopで Player.csを編集します。
ソースの中身はまるごと置き換えて問題ありません。
置換後、Ctrl+Sで保存したら、Unity画面に戻りましょう。
ダイアログが表示されるので、「Go Ahead!」をクリックし、ソースを修正させましょう。
変更点は以下の通りです。
・プレイヤーの移動と移動制限処理をまとめて、Move関数として実装し、それの呼び出しコードを追加
・Clamp関数を廃止し、Move関数を新規追加
Clamp関数に移動量を加えるコードを追記し、Move関数として実装し直した感じになっています。
9.2 Spaceship.csとEnemy.csの修正
Player.csとEnemy.cs共通の処理を記述しているSpaceship.csにMoveメソッドがありますが、Player.csで使用しなくなったので修正を行います。
Projectタブの Scripts配下にある Spaceshipをダブルクリックし、MonoDevelopで Spaceship.csを編集します。
ソースの中身はまるごと置き換えて問題ありません。
置換したら、Ctrl+Sで保存します。
ついでに Enemy.csも編集しましょう。
こちらも、ソースの中身はまるごと置き換えて問題ありません。
置換後、Ctrl+Sで保存したら、Unity画面に戻りましょう。
ダイアログが表示されるので、「Go Ahead!」をクリックし、ソースを修正させましょう。
Spaceship.cs の変更点は以下の通りです。
・Move関数を削除
Enemy.cs の変更点は以下の通りです。
・Spaceship.Move関数呼び出しを、ローカルのMove関数呼び出しに差し換え
・Move関数を新規実装
今回はこれにて終了です。
うまくいきましたか?