BLOGアプリ内課金(IAP)の実装・運用にかかる時間を大幅に削減してアプリの収益性を高めるサービス「itemstore(アイテムストア)」が、アプリ内課金に関する様々な話題や企画をお届けする公式ブログです。導入アプリ紹介サポートプログラムチュートリアル無料ではじめる2018-04-05【いますぐ始めるアプリ内課金】第4回:Unityで開発を進めるいますぐ始めるアプリ内課金はじめに前回から間が空いてしまいましたが、「いますぐ始めるアプリ内課金」の連載を再開いたします。前回は、「アプリ内課金を含むブロック崩し」という企画をもとに、どのようにすれば実現できるかを具体的に設計しました。ブロック崩しの開発を進めていきたいと思います。記事では、より詳しい説明を掲載しているので併せて参考にしてください。プロジェクトを教材として公開しています。開き、プログラムや素材を実際に見ることで、記事の内容がよりわかりやすくなると思います。シーンを開いて実行ボタンを押すことで、ブロック崩しをエディタ上でプレイできます。ゲームを作るイメージをつかんでいただくために、ボールが落下するシーンを作る工程をチュートリアルとして紹介します。シーンを作る最初にボールを配置するシーンを作りましょう。プロジェクトを新規作成した場合は、最初から用意されています。Scene]から作成できます。シーンを作っただけだと、上の図のようにカメラだけが配置されています。誰もいない舞台をカメラが映し出しているようなものです。シーンにゲームオブジェクトを配置する次に、空っぽのシーンにボールのゲームオブジェクトを配置してみましょう。シーンにドラッグ&ドロップすると、ボールの絵を表示するゲームオブジェクトがシーンに追加されました。上で作成しているゲームを実行することができます。この状態では、ボールが表示されているだけで、まったく動きません。ゲームオブジェクトにコンポーネントを付加するそこで、次に物理挙動の振る舞いを与えるコンポーネントを追加します。ボタンを押すと、さまざまなコンポーネントをゲームオブジェクトに追加できます。これで、ボールに物理挙動の振る舞いが追加されました。再生マークのボタンを押してゲームを実行してみましょう。さっきは空中で止まっていたボールが重力に従い落下するようになりました。チュートリアルのまとめまだまだこれだけではゲームとは呼べませんが、今のチュートリアルのようにシーンを作りゲームオブジェクトを配置し各ゲームオブジェクトごとに必要な機能(コンポーネント)を付加していくことを積み重ねていくことで、少しずつゲームを作ることができます。シーンとゲームオブジェクト前述のチュートリアルでは、1つのシーンに1つのゲームオブジェクト(ボール)だけでした。実際は、タイトル画面や、ブロック崩しをプレイするステージ画面など、画面の数に応じてシーンを作ります。それらのシーンを切り替えたり、重ねたりすることで、ゲームを進行させていきます。複数が連携することは、ゲームオブジェクトも同じです。ゲームオブジェクトはシーンに複数配置し、お互いに影響を与えながらゲームを実現しています。教材のブロック崩しでも、ボールだけではなく、バー、ブロック、壁などさまざまなゲームオブジェクトが1つのシーンに配置されることでブロック崩しとして動作しています。コンポーネントゲームオブジェクトをシーンに配置しただけでは、ただそこに存在するだけです。表示もされなければ、移動もしません。そこで必要になるのが、ゲームオブジェクトに機能を付加できるコンポーネントです。コンポーネントは、機能ごとにさまざまなものが標準で用意されていて、足りなければ独自のものを作成することもできます。ひとつのゲームオブジェクトの中に複数のコンポーネントを付加することができ、コンポーネント同士が協調してゲームオブジェクトの振る舞いを実現しています。下の図は、ブロック崩しのボールを配置したステージ画面のシーンです。いうひとつのゲームオブジェクトの中でコンポーネント同士が協調してボールの振る舞いを実現しています。記事でより詳しく説明していますので、併せてご覧ください。Qiita各パーツの実装それでは、実際にブロック崩しの実装を進めていきたいと思います。はじめに、ブロック崩しには欠かせない以下のパーツの機能や実装イメージを紹介します。壁を配置するまずは、壁を配置しましょう。これがないとボールを動かしたときに跳ね返ることなく画面の外に飛び出してしまいます。壁の役目はボールを跳ね返すことです。いうコンポーネントを付加し、物理的な衝突を行えるようにしておきます。いうスクリプトをコンポーネントとして付加しています。タブで設定ができます。この場合は音声ファイルをドラッグ&ドロップして効果音のフィールドに設定しています。ボールとぶつかったことは、イベントで教えてもらえます。イベント関数が衝突時に呼び出されます。スクリプトの完成です。バーを動かすバーは、ブロック崩しでプレイヤーが操作する対象となります。用意しておいたバーの画像をシーンに表示するところから、横移動し、ボールをはじき返すまでを説明します。バーのスプライトをシーンに追加するまずは、バーのゲームオブジェクトをシーンに配置してみましょう。タブへドラッグ&ドロップするだけで、バーの画像を表示するゲームオブジェクトがシーンに配置できます。コンポーネントを付加しておきます。コンポーネントは、タッチされた場所に向かって横移動したり、ボールの方向を変更する処理を実装しています。入力された位置に移動させるバーの位置とタッチされた位置は座標系が違うので、どちらかに合わせる必要があります。今回はゲームオブジェクト中心で処理をするため、タッチされた位置(スクリーン座標系)をワールド座標系に変換してから、位置関係を比較します。テラシュールブログ移動も、いきなり瞬間移動するのではなく、決めておいたバーの最大速度の範囲で少しずつ入力地点に移動するようにします。ぶつかったバーの位置で角度を変えるボールはぶつかったバーの位置で角度を変えます。物理エンジンまかせにはできません。衝突イベントで、ボールの方向を強制的に変更しています。衝突イベントでは、どの位置に衝突したかも知ることができます。それをもとに、どの程度の角度に修正するかを計算し、ボールに設定しています。ボールを動かすボールは反射しながら一定速度で進みます。物理エンジンを利用しつつ、ゲームならではの物理的に不自然な処理は独自のコンポーネントで制御します。コンポーネントを付加します。他にさまざまな形があるので、表示する形状に適したものを選びましょう。ボールを等速で移動させる処理や、移動方向の制御を行っています。最初はタッチした方向へ移動させるボールは最初止まっています。今回はフラグによって、止まっている状態と動いている状態を制御しています。プレイ開始と同時に、他のスクリプトからボールに動くように指示が送られます。このときに、最初の移動方向も設定されます。設定する移動方向は、ボールとタッチされた座標との成す角度になります。いう便利な関数に座標を入れるだけで角度を算出できます。物理演算にまかせる壁などにぶつかったら、角度をどのように変えればよいでしょうか。より、自動的に衝突したあとの角度を計算し、方向を変えてくれます。等速移動をさせるボールは一定の速度で動きます。いう変数の操作で制御します。移動するための加速度のベクトルです。角度は変更せず、毎回同じ移動量にすることで、一定の速度を保ちます。移動量が1になる単位ベクトルを作り、一定の移動量をかけてあげます。ブロックを配置する今回作るブロック崩しでは、ブロックにレベルを持たせることで、崩せるまでの回数にパターンを設けています。なったらそのブロックは消滅します。コンポーネントを付加します。なったら自身のゲームオブジェクトを削除します。壁と同様にボールがぶつかったら、効果音を再生します。プレハブを用意するブロックはたくさん配置します。ドラッグ&ドロップして、コンポーネントを設定するのはとても面倒です。それに、何か修正する場合、配置したブロックの数だけ修正しなければいけなくなります。そんなときに便利な機能がプレハブです。プレハブがあれば簡単に複製が作れるだけではなく、修正も簡単に反映できます。タブにドラッグ&ドロップするだけです。タブにドラッグ&ドロップすると、簡単に複製がシーンに配置されます。このとき、ブロックを一定間隔できっちり並べたくなります。ダイアログを表示しましょう。整列させたいグリッドの間隔を指定します。スクリーンショットで設定されている値は、ブロック1個分の幅をワールド座標系に置き換えたものです。画面解像度とカメラのサイズから、1ピクセル分のワールド座標系の幅を求めれば、ブロックのピクセル幅をかけるだけで求めることが出来ます。[X]、[Y]ボタンをクリックすれば、指定されたグリッド幅で整列します。キーを押しながらブロックをマウスで移動させると、設定した幅を単位として移動させることができます。教材サンプルからオリジナルのステージを作る際にも便利な機能なので覚えておくと良いでしょう。いうゲームオブジェクトの下に複数のブロックが連なっているのがわかります。これは、ゲームクリアの判定処理のための配置です。なった瞬間にゲームクリアの処理を呼び出すようにしています。ゲームオーバー領域を配置するゲームオーバー領域はこれまでのゲームオブジェクトと少し違います。ゲームオーバー領域は壁やブロックと違いボールと衝突することはありません。ボールが画面の下に落ちたことを判定するためのものです。コンポーネントを付加します。これは、衝突を起こすためではなく、当たり判定のイベントを呼び出してもらうためです。いうフィールドにチェックをいれます。衝突の物理演算をしません。イベントの呼び出しで通知されます。ボールと接触したことを知ったら、ゲームの進行役に対してゲームオーバーになったことを伝えます。次回予告かなり長くなってきましたので、今回はここまでです。次回はゲームの進行に必要となるさまざまな画面や機能について説明しながら、ひとまずアプリ内課金のないブロック崩しを完成させたいと思います。間を空けず公開する予定ですので、少しお待ちください。それでは、次回をお楽しみに。item-store.net文・開発:さくらくらうど(@SakuraCrowd)個人でゲームを開発しています。アプリ内課金については初心者ですが、itemstoreを利用することで簡単に課金ゲームアプリが作れることを、実際の開発を通して伝えられたら良いなと思っています。12:22【いますぐ始めるアプリ内課金】第4回:Unityで開発を進めるTweet関連記事2019-05-20【英会話メイドのプログラミング学習記】ブロック崩しゲームの巻こんにちは。みなさん、...2018-05-24バズるゲームも誕生するunityroomで手軽にゲームを公開してみよう!こんにちは。はてなブログProアプリ内課金(IAP)の実装・運用にかかる時間を大幅に削減してアプリの収益性を高めるサービス「itemstore(アイテムストア)」が、アプリ内課金に関する様々な話題や企画をお届けする公式ブログです。Inc.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。