Ray WenderlichにUnity 2Dで、Jetpack Joyrideを作るチュートリアルがあったので、すこし参考にして3D版を作ってみました。最終的にはFlappyBirdのようになり、Ray Wenderlichのチュートリアルとは大分違うゲームになりました。
How to Make a Game Like Jetpack Joyride in Unity 2D – Part 1
いくつか特徴的な部分を記述します。
目次
重力の調整
Unityでは、キューブをある程度の重さにして、上に放り投げた場合、ゆっくり落ちてくるように見えます。これに対応するにはミニゲームの場合は影響を与える箇所がほぼないため、メニュー->[Edit]->[Project Settings]->[Physics]で重力の設定を変えてしまうことです。これでソースコードを修正したりせずに簡単に早く落下させることができます。
ブロックの判定
物理エンジンを使わない場合、衝突判定は面倒ですが、Unityだとかなり楽になります。以下の画像がブロックと、それを抜ける隙間部分です。
Wallという空のGameObjectの子要素に、Topブロック、隙間(Gate)、Bottomブロックを配置しています。TopとBottomのブロックは単純にキューブのY軸を10にしたオブジェクトです。それで、隙間の部分は、空のGameObjectにBox Colliderコンポーネントを追加し、”Is Trigger”にチェックを入れて、OnTriggerExitで、プレイヤーが通過したら、得点が入るようにしています。
Wallのサイズは特に変更せずに、ランダムで表示するY座標を変更させることで以下の画像を実現させています。Unityを使わない場合ブロックのサイズをプログラミングで調節する必要がありますが、Unityは物理エンジンと、トリガー機能があるので、かなり楽に実装できました。
プレイヤーとジェットパックを繋げる方法
プレイヤー本体とジェットパックをまとめる方法は、Fixed Jointコンポーネントを使います。ジェットパック側のGameObjectで、Fixed Jointコンポーネントを追加して、”Connected Body”に本体を追加するだけです。
このプロジェクトの配布
https://hajimete-program.com/games/Jetpack.zip
まとめ
ブロック崩しなど小さなゲームを何回も作っていたので、FlappyBirdのようなゲームは初めてでしたが、今までの知識を総動員することで、躓くことなく実装できました。