itemstore BLOG

アプリ内課金(IAP)の実装・運用にかかる時間を大幅に削減してアプリの収益性を高めるサービス「itemstore(アイテムストア)」が、アプリ内課金に関する様々な話題や企画をお届けする公式ブログです。

【いますぐ始めるアプリ内課金】第5回:ブロック崩しを完成させる(アプリ内課金なし)

f:id:cayto_pr:20180406194916p:plain

はじめに

前回は、Unityを使ってブロック崩しに必要となる各パーツの実装まで進めました。

 

今回は、ゲームの進行に必要となるさまざまな画面や機能の実装を進めて、ひとまずアプリ内課金がない状態のブロック崩しを完成させたいと思います。

 

f:id:cayto_pr:20180410084901g:plain

完成イメージ

 

連動している Qiita 記事では、より詳しい説明を掲載しているので併せて参考にしてください。

 

qiita.com

qiita.com

 

また、前回ご紹介した通り、ブロック崩しの Unity プロジェクトを教材として公開しています。

ダウンロードした教材プロジェクトを Unity で開き、プログラムや素材を実際に見ることで、記事の内容がよりわかりやすくなると思います。

教材は github からダウンロードしてください。

 

https://github.com/sakura-crowd/sample_blockkuzushi

 

次のように Title シーンを開いて実行ボタンを押すことで、ブロック崩しをエディタ上でプレイできます。

 

f:id:cayto_pr:20180404201024p:plain

 

アプリ内課金の実装については、新たな Unity プロジェクトの教材を用意しつつ、次回以降に説明しますのでお楽しみに。

 

今回の記事の最後では、完成したブロック崩しの GooglePlay Store へのリンクも紹介していますので、プレイしたい方はそちらへもアクセスしてみてください。

 

それでは、ブロック崩しの作り方の続きを見ていきましょう。

 

ゲームの進行に必要な画面と機能の実装

それでは、ゲームの進行に必要な以下の画面と機能の作り方や仕組みを説明していきます。

 

  • タイトル画面
  • ゲームオーバーダイアログ
  • ステージ画面とコンティニュー機能
  • セーブ機能

 

タイトル画面の作成

タイトル画面には、タイトル画像、説明のテキスト、さまざまなボタンが配置されています。これらのパーツ(Image, Text, Button)は Unity の標準機能で備わっているため、簡単に配置することができます。

 

ここでは、ステージ選択などで必須となるボタンの使い方を説明しましょう。

 

ボタンはメニューの [Game Object]→[UI]→[Button]などからシーンに配置できます。

しかし、ボタンは配置しただけでは、クリックしても何も起きません。クリックされたときに行う処理を選択する必要があります。

 

[Inspector]タブでボタンのコンポーネントを見ると [On Click] というフィールドがあります。ボタンがクリックされたときは、ここで設定した関数が呼び出されます。

 

f:id:cayto_pr:20180406194817p:plain

 

図の①は呼び出し先のゲームオブジェクト、②は呼び出す関数です。引数を持つ関数を選ぶと、渡す引数も設定できます。これによりステージ選択ボタンをクリックすると、ステージ画面へ遷移するための関数が呼び出されるようになります。

 

なお、今回例にあげたステージ選択ボタンは、読者の方がステージを簡単に増やすことができるように独自のスクリプトを割り当ててプレハブ化しています。これについては、補足の Qiita 記事をご覧ください。

 

ゲームオーバー時のダイアログの仕組み

パネルを使うことで、表示されるテキストやボタンなどのパーツをまとめておくことができます。パネルをダイアログとして使う場合、最初はパネルを非表示にしておき、必要になったら有効化します。

 

ゲームオブジェクトの有効化は [Inspector] タブの左上のチェックボックスによって設定できます。もちろん、スクリプトでも gameObject.SetActive() で制御できます。

 

例えば、ステージ画面でゲームオーバーになった場合は、無効にしておいたゲームオーバー時のパネルを有効化して表示します。

 

f:id:cayto_pr:20180406194813p:plain

 

ブロック崩しのステージ画面の仕組み

ステージの固有部分と共通部分でシーンを分ける

ステージごとにブロックの配置は異なりますが、ボール・バー・壁・ダイアログなどは共通です。

 

共通の部分をステージごとにコピーして使うこともできますが、その後の修正や管理などが面倒です。そのため、ステージの固有 / 共通部分でシーンを分け、ステージ共通シーンは各ステージで使いまわします。

 

シーンの管理は、 UnityEngine.SceneManagement で行います。SceneManager.LoadScene でシーンを指定してロードできます。このとき、 Additive というオプションをつけることで、以前のシーンをアンロードせずに追加でシーンをロードします。

 

教材サンプルでは、ステージ選択ボタンが押されたときなどに、

  1. ステージ固有のシーンをロード(以前のシーンは全てアンロードされる)
  2. ステージ共通のシーンを追加でロード

といった処理を行うことで、各ステージ画面に切り替えています。

 

f:id:cayto_pr:20180406194810p:plain

 

コンティニューの仕組み

コンティニュー時、画面下に落ちたボールなどの状態は初期状態に戻しますが、ブロックは復活させてはいけません。

 

ステージを固有と共通のシーンに分けると、副次的にコンティニューも簡単になります。

ステージ共通シーンだけを再びロードし直せば、ステージ固有シーンのブロックの配置はそのままで、プレイを再開できます。

 

ステージの状態の記録

ゲームにはセーブ機能がついているものがたくさんあります。セーブされた情報は、アプリを終了しても残り、再びアプリを起動したときに以前の状態を復元するために使われます。

 

教材のブロック崩しでは、 STAGE1 をクリアしないと STAGE2 はプレイできません。セーブがなければ、アプリを再起動するたびに STAGE1 から始めなくてはいけません。そのため、ステージをクリアしたかどうかなどの情報をステージごとにセーブしています。

 

ステージの状態の管理方法

教材サンプルでは、ステージごとに次の状態を数値で持っています。

  • 0:選択不可(まだステージをプレイできない)
  • 1:選択可能(ステージをプレイできる。クリアはしていない)
  • 2:クリア済み(ステージをプレイできる。クリアしている)

 

これらのステージの状態は、 Unity の PlayerPrefs という便利な機能によって簡単に管理できます。PlayerPrefs では、キーの名前と値を自由に設定することができます。

 

教材サンプルの場合、ステージ固有の Scene 名をキーの名前につけています。例えば Stage1 というステージの状態は “StageStatus_Stage1” というキーの名前で管理しています。

 

ステージをクリアすると、現在のステージの状態を「クリア済み」にして、次のステージが「選択不可」ならば「選択可能」に変更します。

 

f:id:cayto_pr:20180406194806p:plain

 

タイトル画面のステージ選択ボタンでは、対応するステージの状態を確認して、ボタンの状態を変えています。

 

ブロック崩し(アプリ内課金なし)の完成・公開

以上で、ひとまずアプリ内課金がない状態のブロック崩しが完成しました。実際に動作しているプレイデモ動画を公開していますのでご覧ください。

 

www.youtube.com

 

また、今回作ったブロック崩し(アプリ内課金なし)は Google Play で公開されています。プレイしたい方は、次のURLまたは QR コードからアクセスしてみてください。

 

play.google.com

f:id:cayto_pr:20180403112109p:plain

 

次回予告

ついにブロック崩しが完成しました。この段階でもゲームとして遊ぶことはできますし、Google Play で公開することもできました。

 

しかし、今回の目的はアプリ内課金を始めること。

 

次回はいよいよ itemstore を利用して、ブロック崩しにアプリ内課金を実装したいと思います。

 

ちなみに、アイテムの購入処理は itemstore を使うととても簡単で、本当に驚きました。最短10分でアプリ内課金を実装可能と宣伝されていますが、実際に itemstore で実装してみると納得のお手軽さです。

 

それでは、次回をお楽しみに。

 

item-store.net

 

文・開発:さくらくらうど(@SakuraCrowd)

個人でゲームを開発しています。アプリ内課金については初心者ですが、itemstoreを利用することで簡単に課金ゲームアプリが作れることを、実際の開発を通して伝えられたら良いなと思っています。

Blog : http://sakuracrowd.blogspot.jp/

Twitter : https://twitter.com/SakuraCrowd