Unityのアプリ内購入は、コードをほとんど書かずに実装することができます。
ライブラリをインポートする
Window > Services
からサービスウインドウを開き、In-App Purchasing のトグルをONにします。
その先の画面のトグルもONにし、13歳以下対象かどうかのチェックボックスを入れて Continue ボタンを押します。
このチェックボックスに関しては下の記事参照
さらに下記画面に移動するので、Importボタンを押すとライブラリがインポートされます。
これで準備完了です。
購入ボタンを配置する
メニューから
Window > Unity IAP > Create IAP Button
で、シーンに購入ボタンを置きます。
一見なんのへんてつもないボタンですが、インスペクタでみると
IAP Button コンポーネントがついています。
このコンポーネント内では直接
- ストアで売るものの情報
- 購入成功、失敗後のコールバック参照
を定義できます。
売り物情報編集
IAP Catalog ボタンを押して編集画面を開きましょう。
IDは売り物を表す一意な文字列で、これはAppStoreなどで使用するIDと一致している必要はありません。ゲーム内で使いやすい文字列にするといいでしょう。
Typeはアイテムの種類で、
Consumableはジェムなどの消費アイテム、Non Consumableは使っても消費しないアイテム、Subscriptionは広告消しなどの永続アイテムという区分けのようです。
Non ConsumableとSubscriptionは購入状態を復元できるようなので、種類はちゃんと入力しましょう。
一通りアイテムを定義したら、IAP Buttonで購入対象のIDを選択します。
テスト動作してみる
実はすでにエディタ上で実行できます。
ゲームを実行して購入ボタンを押すと、ダイアログが出てきます。
実際にはGooglePlayStoreやAppStoreのアプリ内購入システムと接続するので、アプリ書き出し後に出てくるダイアログは各システム依存です。
ちなみにカタログのウインドウでCatalog Exportを実行すると、各ストアにアップロードするCSVファイルなどを吐き出せるようです。便利ですね。
購入成功時のコールバックを呼び出す
特にConsumableなアイテムを購入したあとは、ゲーム内のアイテム数を増やさなければなりません。
それにはまず下記のような関数をスクリプトに定義します。
using UnityEngine.Purchasing; public class PurchaseTest : MonoBehaviour { // 購入完了 public void OnPurchaseCompleted (Product product) { } }
これを適当なオブジェクトにつけると、IAP Buttonの On Purchase Complete 欄に登録することができます。
これで購入完了時に関数がよびだされます。
購入されたものから自動で処理してみる
ボタンごとにコールバックを定義してもいいのですが、Productクラスからは購入されたものの情報を取得できるので、条件分岐で処理を分けることもできます。
たとえばIDを
gem.購入数
という形式にしておけば、以下のコードで購入数を引き出すことができます。
// 購入完了 public void OnPurchaseCompleted (Product product) { // IDから購入量取得 string[] defs = product.definition.id.Split('.'); if (defs[0].Equals ("gem")) { int val = 0; if (Int32.TryParse (defs [1], out val)) { // 獲得ジェム数を保存 } } }
- 公式サイト