パーティクル(Shuriken)をCanvasの中においたら同じ座標系で色々できたんだけど。iTweenとかで好きに移動できるね!
オハヨウゴザイマス。坂内です。
ポケットガール2の予約が振るわなすぎて、涙目です。
1の1/5くらい・・・・まぁ予想はしてたんですけどね。
悪い方の予想が当たったということで。
とりあえず、まだ予約していない方、よろしくお願い致しますm(_ _)m
Android:https://yoyaku-top10.jp/u/a/MTY4MzI
iOS:https://yoyaku-top10.jp/u/a/MTY4Mzc
ナンバリングタイトルは前回がかなり良くないと、2作目で伸びないという世の中のジンクスがあったりなかったり・・・・・・
よし、気を取り直して完成させるぞ!
そういえば、最近おもったのが、パーティクル(Shuriken)をuGUIのCanvasの中にいれても普通に見えるんだね・・・・
これは初めからこうでしたっけ?

一応パーティクルのZ座標はー100にしてますけど、X、Y座標は普通にuGUIの他のパーツと同じ座標で移動とか指定ができました。
ちゃんとuGUIの手前に出てますね。
あ・・・・uGUIのパーツとパーツの間に出すってのは無理なのかな・・・・

そりゃそうかw
やるとしたら、3Dオブジェクトをカメラとパーティクルの間に置くしかないか・・・
パーティクルが2D対応してくれればいいのに!!
ってことでアデュ~ノシ
ポケットガール2の予約が振るわなすぎて、涙目です。
1の1/5くらい・・・・まぁ予想はしてたんですけどね。
悪い方の予想が当たったということで。
とりあえず、まだ予約していない方、よろしくお願い致しますm(_ _)m
Android:https://yoyaku-top10.jp/u/a/MTY4MzI
iOS:https://yoyaku-top10.jp/u/a/MTY4Mzc
ナンバリングタイトルは前回がかなり良くないと、2作目で伸びないという世の中のジンクスがあったりなかったり・・・・・・
よし、気を取り直して完成させるぞ!
そういえば、最近おもったのが、パーティクル(Shuriken)をuGUIのCanvasの中にいれても普通に見えるんだね・・・・
これは初めからこうでしたっけ?

一応パーティクルのZ座標はー100にしてますけど、X、Y座標は普通にuGUIの他のパーツと同じ座標で移動とか指定ができました。
ちゃんとuGUIの手前に出てますね。
あ・・・・uGUIのパーツとパーツの間に出すってのは無理なのかな・・・・

そりゃそうかw
やるとしたら、3Dオブジェクトをカメラとパーティクルの間に置くしかないか・・・
パーティクルが2D対応してくれればいいのに!!
ってことでアデュ~ノシ
Category: 開発日記(Unity)
【Unity】UnityEditor上でクリックした瞬間にポーズして画面の確認とかしたかったんですがショートカットあるんすね。
こんにちは。
大坂です。
寒いっす!寒いのに花粉が大量にやってくるっす!orz
あ、予約、引き続きお願いします!
Android版予約:https://yoyaku-top10.jp/u/a/MTY4MzI
iOS版予約:https://yoyaku-top10.jp/u/a/MTY4Mzc
さて、今日のネタですが…
UnityEditorでクリックした瞬間にすぐポーズしたかったのでそんなショートカットがあるのかと。(今更感)
「CTL+SHIFT+P」でポーズができるんですね。
メニューを開いてみたら色々ショートカットも書いてありました。
こんな感じ。

他のメニュー開いてもいろいろありますね。
Unity公式でもまとめてありました。
http://docs.unity3d.com/ja/current/Manual/UnityHotkeys.html
はい!何とも中身がないですが!これでおしまい!
また来週…orz
大坂です。
寒いっす!寒いのに花粉が大量にやってくるっす!orz
あ、予約、引き続きお願いします!
Android版予約:https://yoyaku-top10.jp/u/a/MTY4MzI
iOS版予約:https://yoyaku-top10.jp/u/a/MTY4Mzc
さて、今日のネタですが…
UnityEditorでクリックした瞬間にすぐポーズしたかったのでそんなショートカットがあるのかと。(今更感)
「CTL+SHIFT+P」でポーズができるんですね。
メニューを開いてみたら色々ショートカットも書いてありました。
こんな感じ。

他のメニュー開いてもいろいろありますね。
Unity公式でもまとめてありました。
http://docs.unity3d.com/ja/current/Manual/UnityHotkeys.html
はい!何とも中身がないですが!これでおしまい!
また来週…orz
Category: 開発日記(Unity)
ポケガ2の予約告知で今日のブログは終わりだよ?ごめんね ごめんねー
こんにちは!坂内です。
また月曜日がきちゃいました。
ポケガ2こと「ポケットガール ~魔王を狩るモノ~」の予約が開始されました!
是非予約まだの方は予約してね!
Android版予約:https://yoyaku-top10.jp/u/a/MTY4MzI
iOS版予約:https://yoyaku-top10.jp/u/a/MTY4Mzc
iOS版の予約も今日から始まりました!
現在PV制作中。
完成したら載せますねぇ
ってことで、ポケガ2のリリースまであと約1ヵ月!
今日仕様決まった箇所があったり、チュートリアルもエンディングもまだ手が入っていませんが、終わるのでしょうか?!
やばそうです。えぇ やばそうです。
終わるのかが心配すぎる!
とりあえず頑張ってみます!
ということで、今日は予約の告知だけ!アデュ~ノシ
また月曜日がきちゃいました。
ポケガ2こと「ポケットガール ~魔王を狩るモノ~」の予約が開始されました!
是非予約まだの方は予約してね!
Android版予約:https://yoyaku-top10.jp/u/a/MTY4MzI
iOS版予約:https://yoyaku-top10.jp/u/a/MTY4Mzc
iOS版の予約も今日から始まりました!
現在PV制作中。
完成したら載せますねぇ
ってことで、ポケガ2のリリースまであと約1ヵ月!
今日仕様決まった箇所があったり、チュートリアルもエンディングもまだ手が入っていませんが、終わるのでしょうか?!
やばそうです。えぇ やばそうです。
終わるのかが心配すぎる!
とりあえず頑張ってみます!
ということで、今日は予約の告知だけ!アデュ~ノシ
Category: Androidアプリ紹介
【Unity】Time.timeScaleに影響しないunscaledDeltaTimeとかあるんですねぇ・・・
こんにちは。
大坂です。
なんか花粉がやってきた気がする中皆様いかがお過ごしでしょうか(ぇ
今週の小ネタですね。
アクションゲームとか作っててPauseするのに「Time.timeScale=0」にしたりすることもあると思いますが、
「Time.deltaTIme」が止まって困ることがあるかもしれません。ないかもしれません…。
一応「Time.unscaledDeltaTime」っていうのがあってこいつは「Time.timeScale=0」でも動いています。
書くほどでもないですけど試したコードです。
結果です。

「Time.deltaTIme」は0ですが、「Time.unscaledDeltaTime」はちゃんと動いてそうですね!
まぁ何かの時には使えるかもしれないのでメモです!
ではまた来週ノシ
大坂です。
なんか花粉がやってきた気がする中皆様いかがお過ごしでしょうか(ぇ
今週の小ネタですね。
アクションゲームとか作っててPauseするのに「Time.timeScale=0」にしたりすることもあると思いますが、
「Time.deltaTIme」が止まって困ることがあるかもしれません。ないかもしれません…。
一応「Time.unscaledDeltaTime」っていうのがあってこいつは「Time.timeScale=0」でも動いています。
書くほどでもないですけど試したコードです。
void Start() {
Time.timeScale = 0;
}
void Update () {
Debug.Log("Time.deltaTime ⇒ " + Time.deltaTime);
Debug.Log("Time.unscaledDeltaTime ⇒ " + Time.unscaledDeltaTime);
}
結果です。

「Time.deltaTIme」は0ですが、「Time.unscaledDeltaTime」はちゃんと動いてそうですね!
まぁ何かの時には使えるかもしれないのでメモです!
ではまた来週ノシ
Category: 開発日記(Unity)
ねぇねぇおくさん!UnityIAPで回線がつながっていないと無限リトライするらしいっすよ!どしましょうかねー
おはようございます。坂内です。
昨日暖かかったんですけどねー
今日は変わって、寒くなりました。
風邪にはお気を付け下さい。
ポケガ2のPVの曲が大体できてきてテンションだだ上がりっす!
その曲にあとは映像作ってもらって完成ですね!
どんな映像来るのかも楽しみっす!
ちなみにポケガ2の曲には歌も入ってます。
もちろんオリジナル!!
PV公開お楽しみに!!
で、技術的な話。
さっきTwitterでこんな話が出てました。

こわいっすねぇ・・・・
ってことで、オフラインの場合はIAP呼ばないって対応入れないといけないかもしれません。
いや、呼んだ結果タイムアウトさせての方が正しいのかな?
前者の場合、IAPでイニシャライズを呼ぶ前に、オンラインかどうかの判定を行えばいいんでしょうか。
以前にインターネット接続がされているかどうかの処理についてブログを書いていました。
http://halcyonsystemblog.blog.fc2.com/blog-entry-250.html
こちらで判定し、インターネットに繋がっていない場合は閉じる処理等をすればいいかもしれません。
後者のタイムアウトについては、InitializePurchasingメソッドの最後にタイムアウト用のメソッドを5秒毎とかに呼んであげる?
呼んであげる先のメソッドでは、リターンフラグを見てタイムアウトの判定する。
リターンフラグが立っていたら、何もしない。
OnInitializedメソッドと、OnInitializeFailedメソッドの中ではリターンフラグを立てて上げる。
でも、イニシャライズを呼ぶ直前に接続確認しとけば、そのあとで引っかかることなさそうだけど、どうなんでしょう?
こういうのはどこまで対応すればいいんでしょうかねぇ。
UnityIAPのイニシャライズって、課金画面を開いた時に行い、そのあと選択したアイテムをBuyProductIDとかのメソッドで買うと思うんですが(メソッドとかについては、この間のUnityIAPの話参照)、画面を開いた時はイニシャライズ成功していてもその後で回線切れた場合は、BuyProductIDでまた無限リトライになっちゃうんですかね・・・・・
だとすると、BuyProductIDの始めでも接続確認必要だったり?
変に無限リトライ中に通常処理に戻して、再度買われた場合とか、無限リトライ中にもう一度BuyProductIDが投げられて、重複で買っちゃうことになりそうですもんね。
基本的には回線のいいところでゲーム内アイテムの課金とかして頂ければいいのですが、そこはどうしても難しいですもんねー
で、エラーでたのに2回分買ったことになった!金返せ!★1って言われるんですよね・・・・
課金周りは毎回怖くてびくびくしています!!
Adfully+CaytoのアイテムSTOREも4月ですし・・・どうしたものか・・・・
ってことで、こうすればいいよ!って案あったら教えてください!
では、アデュ~ノシ
昨日暖かかったんですけどねー
今日は変わって、寒くなりました。
風邪にはお気を付け下さい。
ポケガ2のPVの曲が大体できてきてテンションだだ上がりっす!
その曲にあとは映像作ってもらって完成ですね!
どんな映像来るのかも楽しみっす!
ちなみにポケガ2の曲には歌も入ってます。
もちろんオリジナル!!
PV公開お楽しみに!!
で、技術的な話。
さっきTwitterでこんな話が出てました。

こわいっすねぇ・・・・
ってことで、オフラインの場合はIAP呼ばないって対応入れないといけないかもしれません。
いや、呼んだ結果タイムアウトさせての方が正しいのかな?
前者の場合、IAPでイニシャライズを呼ぶ前に、オンラインかどうかの判定を行えばいいんでしょうか。
以前にインターネット接続がされているかどうかの処理についてブログを書いていました。
http://halcyonsystemblog.blog.fc2.com/blog-entry-250.html
こちらで判定し、インターネットに繋がっていない場合は閉じる処理等をすればいいかもしれません。
後者のタイムアウトについては、InitializePurchasingメソッドの最後にタイムアウト用のメソッドを5秒毎とかに呼んであげる?
呼んであげる先のメソッドでは、リターンフラグを見てタイムアウトの判定する。
リターンフラグが立っていたら、何もしない。
OnInitializedメソッドと、OnInitializeFailedメソッドの中ではリターンフラグを立てて上げる。
でも、イニシャライズを呼ぶ直前に接続確認しとけば、そのあとで引っかかることなさそうだけど、どうなんでしょう?
こういうのはどこまで対応すればいいんでしょうかねぇ。
UnityIAPのイニシャライズって、課金画面を開いた時に行い、そのあと選択したアイテムをBuyProductIDとかのメソッドで買うと思うんですが(メソッドとかについては、この間のUnityIAPの話参照)、画面を開いた時はイニシャライズ成功していてもその後で回線切れた場合は、BuyProductIDでまた無限リトライになっちゃうんですかね・・・・・
だとすると、BuyProductIDの始めでも接続確認必要だったり?
変に無限リトライ中に通常処理に戻して、再度買われた場合とか、無限リトライ中にもう一度BuyProductIDが投げられて、重複で買っちゃうことになりそうですもんね。
基本的には回線のいいところでゲーム内アイテムの課金とかして頂ければいいのですが、そこはどうしても難しいですもんねー
で、エラーでたのに2回分買ったことになった!金返せ!★1って言われるんですよね・・・・
課金周りは毎回怖くてびくびくしています!!
Adfully+CaytoのアイテムSTOREも4月ですし・・・どうしたものか・・・・
ってことで、こうすればいいよ!って案あったら教えてください!
では、アデュ~ノシ
Category: 開発日記(Unity)
【Unity】UnityIAPでGooleとAppleで設定した金額情報とかの取得
こんにちは。
大坂です。
花粉シーズンも近いですね!今年はちょっと多いようなこと言ってました…orz
毎年のことですがやめていただきたいです…。
さて、先日UnityIAPの使い方についてブログに書きましたが、
GooleとかAppleで設定した情報がとってみたかったのでやってみました。
簡単なんですけどね。
まずは公式ページにあるこのコードのところですね。
https://unity3d.com/jp/learn/tutorials/topics/analytics/integrating-unity-iap-your-game-beta
初期化の処理が終わるとここが呼ばれるみたいです。
このメソッドの引数の「IStoreController controller」に設定した情報が入ってました。
取り方はこんな感じですね。
これでGoogleとかAppleに1個目に設定した課金アイテムの金額が取れます。
iOSでみてもちゃんと「\120」とかで取れます。
取得できる情報は以下の項目みたいです。
isoCurrencyCode:通貨のコード。JPYが取れました。
localizedDescription;課金アイテムの説明に書いた文
localizedPrice:設定した金額のdecimal形式
localizedPriceString:設定した金額のstring形式(「\120」みたいな感じで取れます)
localizedTitle:課金アイテムのタイトルに書いた文(Android 「タイトルに書いた文 (アプリ名)」 みたいな形式になります)
固定で金額書いてもいいのですが、取得できるなら取得して設定した方がいいなっていうことで紹介でした!
では今週もこれにて!
また来週ノシ
大坂です。
花粉シーズンも近いですね!今年はちょっと多いようなこと言ってました…orz
毎年のことですがやめていただきたいです…。
さて、先日UnityIAPの使い方についてブログに書きましたが、
GooleとかAppleで設定した情報がとってみたかったのでやってみました。
簡単なんですけどね。
まずは公式ページにあるこのコードのところですね。
https://unity3d.com/jp/learn/tutorials/topics/analytics/integrating-unity-iap-your-game-beta
public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {
// Purchasing has succeeded initializing. Collect our Purchasing references.
Debug.Log("OnInitialized: PASS");
// Overall Purchasing system, configured with products for this application.
m_StoreController = controller;
// Store specific subsystem, for accessing device-specific store features.
m_StoreExtensionProvider = extensions;
}
初期化の処理が終わるとここが呼ばれるみたいです。
このメソッドの引数の「IStoreController controller」に設定した情報が入ってました。
取り方はこんな感じですね。
controller.products.all[0].metadata.localizedPriceString
これでGoogleとかAppleに1個目に設定した課金アイテムの金額が取れます。
iOSでみてもちゃんと「\120」とかで取れます。
取得できる情報は以下の項目みたいです。
isoCurrencyCode:通貨のコード。JPYが取れました。
localizedDescription;課金アイテムの説明に書いた文
localizedPrice:設定した金額のdecimal形式
localizedPriceString:設定した金額のstring形式(「\120」みたいな感じで取れます)
localizedTitle:課金アイテムのタイトルに書いた文(Android 「タイトルに書いた文 (アプリ名)」 みたいな形式になります)
固定で金額書いてもいいのですが、取得できるなら取得して設定した方がいいなっていうことで紹介でした!
では今週もこれにて!
また来週ノシ
Category: 開発日記(Unity)
ポケットガール1周年ありがとー!そして、ポケガ2へ…
こんばんは!坂内っす。
毎週書いているのに、たまーに他の事が忙しくてブログ忘れそうになります…
さて、今週はネタがないので、久々にポケガの話とかポケガ2の話なんかを書いていきたいと思います。
まずはポケガから。
1月30日をもって、ポケガが1周年になりました!マジで有難うございます!
皆さまのおかげで、なんとか1年生きて来れました。
次の1年が危ないです。いや、毎年危ないです。安定して生きていきたい。アプリ作る仕事をしている時点で無理か・・・(ノД`)シクシク
1周年記念でクリスタル配布しています。
最新にしてポケガ起動してね!
では、ポケガの現状ですが、こんな感じです。
『ポケットガール~永久の錬金術師~』
ダウンロード数(2016年2月8日現在)
Android:166,605DL
iOS:約112,000
ここ1ヵ月のAndroidのダウンロードはこんな感じです。

やはり土日の流入がいい感じです。
といっても、もう伸び悩んで長いんですけど・・・・
売上については、弊社だけの売り上げなら表に出すんですが、色々ありますので書きません。
興味が御座いましたら、本人に直接会ったときに聞いて下さい!
やはり嬉しいのは評価です。

こんな感じで、いい評価を頂いてめっさ嬉しいっす!
ただ、色々な意見がありますので、是非取り入れる要素は2で取り入れて行きたいです。
また、ポケガ1では色々と問題もあります。
以下のデータを見ていて、なんとかしないと!と思っています。
娘作成(名前作成)件数:242,126件
エンディング視聴数:49,173件
着せ替え購入数:3,084件(スクショ等によりクリスタルを手に入れて服を買ってもカウントされる)
圧倒的にキャラ作ってちょっと遊んで、長そうだしめんどそうだなー って方が多い!
まずエンディングまでたどり着いていない!
ですよねーって 感じなんですけど。
それと、着せ替えが全然買われていない。
もう少し着せ替えを手に入れるハードルを下げる必要があると思ってます。
この辺は2で取り入れてるので、もう少し着せ替えをして遊んで貰えるかなとは思っています。
それでは、ポケガ2の話題。
2月中には予約TOP10に出します!
3月中にはリリースします!
1では初期から、「何をすればいいのか分からない」等のコメントがいくつかありましたので、その辺の対応をちょっと入れたいと思っています。
あとは、着せ替えを手軽に手に入れる方法も考えてます!
そろそろ開発も後半に入ってきたので、ちょっとスクショを1枚載せちゃいます。
UIレイアウトは基本ポケガ1に則って置いてるんですけどね・・・・・どうなんでしょw

それではポケガ2をお楽しみに!!
アデュ~ノシ
毎週書いているのに、たまーに他の事が忙しくてブログ忘れそうになります…
さて、今週はネタがないので、久々にポケガの話とかポケガ2の話なんかを書いていきたいと思います。
まずはポケガから。
1月30日をもって、ポケガが1周年になりました!マジで有難うございます!
皆さまのおかげで、なんとか1年生きて来れました。
次の1年が危ないです。いや、毎年危ないです。安定して生きていきたい。アプリ作る仕事をしている時点で無理か・・・(ノД`)シクシク
1周年記念でクリスタル配布しています。
最新にしてポケガ起動してね!
では、ポケガの現状ですが、こんな感じです。
『ポケットガール~永久の錬金術師~』
ダウンロード数(2016年2月8日現在)
Android:166,605DL
iOS:約112,000
ここ1ヵ月のAndroidのダウンロードはこんな感じです。

やはり土日の流入がいい感じです。
といっても、もう伸び悩んで長いんですけど・・・・
売上については、弊社だけの売り上げなら表に出すんですが、色々ありますので書きません。
興味が御座いましたら、本人に直接会ったときに聞いて下さい!
やはり嬉しいのは評価です。

こんな感じで、いい評価を頂いてめっさ嬉しいっす!
ただ、色々な意見がありますので、是非取り入れる要素は2で取り入れて行きたいです。
また、ポケガ1では色々と問題もあります。
以下のデータを見ていて、なんとかしないと!と思っています。
娘作成(名前作成)件数:242,126件
エンディング視聴数:49,173件
着せ替え購入数:3,084件(スクショ等によりクリスタルを手に入れて服を買ってもカウントされる)
圧倒的にキャラ作ってちょっと遊んで、長そうだしめんどそうだなー って方が多い!
まずエンディングまでたどり着いていない!
ですよねーって 感じなんですけど。
それと、着せ替えが全然買われていない。
もう少し着せ替えを手に入れるハードルを下げる必要があると思ってます。
この辺は2で取り入れてるので、もう少し着せ替えをして遊んで貰えるかなとは思っています。
それでは、ポケガ2の話題。
2月中には予約TOP10に出します!
3月中にはリリースします!
1では初期から、「何をすればいいのか分からない」等のコメントがいくつかありましたので、その辺の対応をちょっと入れたいと思っています。
あとは、着せ替えを手軽に手に入れる方法も考えてます!
そろそろ開発も後半に入ってきたので、ちょっとスクショを1枚載せちゃいます。
UIレイアウトは基本ポケガ1に則って置いてるんですけどね・・・・・どうなんでしょw

それではポケガ2をお楽しみに!!
アデュ~ノシ
Category: その他日記
【Unity】SerializeFieldってあんまり使ってなかったけど。
こんにちは。
大坂です。
2016年も早くも1月が終わってしまいました。
…がんばります。
さて月曜日の記事でUnity IAPの記事を載せていましたが、
特別手を加えることなく、iOSでも課金が確認できたので、一応報告を。
デジゲー博Specialも行ったんだけど、Unity5.3から導入されてるIAPも試してみたんだけどどうだろうか?
そして今週の小ネタです。
privateのフィールドをInspectorでも見れるようにする[SerializeField]についてですね。
とりあえずこんな感じでコードを書くと。
って書くとこう見える。

InspectorでtestField_2だけ見えますね。
で、こいつにいろいろ属性とかつけれるんですね。
こんなのを追加してあげると

こんな感じで0から10までスライドで設定できる奴とかにもできますね。
他に何があるかなーって調べてたら、テラシュールさんがまとめてくれてました!
UnityのAttribute(属性)についてまとめてメモる。
結果、人のブログの紹介で終わっちゃいました!
では今週もこれにて!
また来週ノシ(逃げるように)
大坂です。
2016年も早くも1月が終わってしまいました。
…がんばります。
さて月曜日の記事でUnity IAPの記事を載せていましたが、
特別手を加えることなく、iOSでも課金が確認できたので、一応報告を。
デジゲー博Specialも行ったんだけど、Unity5.3から導入されてるIAPも試してみたんだけどどうだろうか?
そして今週の小ネタです。
privateのフィールドをInspectorでも見れるようにする[SerializeField]についてですね。
とりあえずこんな感じでコードを書くと。
private int testField_1;
[SerializeField]
private int testField_2;
って書くとこう見える。

InspectorでtestField_2だけ見えますね。
で、こいつにいろいろ属性とかつけれるんですね。
[SerializeField, Range(0. 10)]
private int testField_3;
こんなのを追加してあげると

こんな感じで0から10までスライドで設定できる奴とかにもできますね。
他に何があるかなーって調べてたら、テラシュールさんがまとめてくれてました!
UnityのAttribute(属性)についてまとめてメモる。
結果、人のブログの紹介で終わっちゃいました!
では今週もこれにて!
また来週ノシ(逃げるように)
Category: 開発日記(Unity)
デジゲー博Specialも行ったんだけど、Unity5.3から導入されてるIAPも試してみたんだけどどうだろうか?
はい、こんにちは坂内っす。
1月30日に幕張メッセで行っていたニコニコ闘会議行ってきました!
ニコニコみないので、本編はあんまり興味はなく、デジゲー博SPECIALが目当てです。
[デジゲー博SPECIAL in 闘会議2016]
http://digigame-expo.org/sp2016
こちら、面白かったです。
規模は去年にあったデジゲー博の半分くらい?もっと少なかったかな?くらいでした。
Room6さんのブースでRoom6グッズ詰め合わせを買わせて頂きました!
他にもラビアンさんのブース、ProtoAccelさんのブース、tomeappさんのブースなど、いくつかまわりましたよっと!
はい、では話は変わって、UnityのIAP試しました!
Unity5.3から導入された、アプリ内課金のシステムですね。
今までappCさんのアイテムSTORE使ったり、AssetStoreでアプリ内課金のAssetを買っていた方には朗報ですよね!
ただ…色々調べても英語のサイトばっかりで中々触る機会がありませんでした。
ポケガ2も佳境に入ってきて、そろそろ課金周りをどうにかしないとなと、思っていたのでいじってみました。
結果としては、AndroidでのConsumableのアプリ内課金は無事成功!(なのか?
今回試したのはAndroidのConsumable(消費型)だけなので、リストア周りはコードに書きっぱなしですが、使っていません。あしからず。
IOSでもこのままいくかもしれませんが、それは今週中に試したいと思います。
IAPを使う上での手順を簡単に書くと以下の感じです。
①GooglePlayでアプリ内アイテムを作成し、有効化しておく。
②UnityにてIAPを有効にする。
③実際のコードを書く。
④一度GooglePlayの方にアルファかベータテストバージョンとしてあげる。
では、①から行ってみましょ。
【①GooglePlayでアプリ内アイテムを作成し、有効化しておく。】
まぁ、これは皆さん分かっている通りGooglePlayにてアプリ内課金を作成します。

と、ここで以前登録した時は、管理対象外のアイテム=Consumable(消費型)という項目があったと思ったんですが、気のせいかな・・
と思ったら、去年(2015年)の1月に前のバージョンとなる「In-app Billing Version2」が終了していて、現在は「In-app Billing Version3」になっていました。
Version3で消費型も非消費型も管理対象のアイテムになったようですね。
こちらに書いていました。
http://qiita.com/Night___/items/1ff72d0a926e0ebdf87c
ってことで、まずは管理型のアイテムを作ります。

【②UnityにてIAPを有効にする。】
では次にUnity側でIAPを有効にします。
有効にする方法は、次の通り。
まずは、サービスウィンドウを開きます。

ここに新しいボタンあるので、コレ押してね。
Window⇒Serviceって押してもいいよ!
そうするとこんな画面が出ます。

ProjectIDを選択します。
これで、「Create!!!」

そしたらこんな画面になるので、In-App PurchasingのOFFを押しましょう!
はい、こんな画面になります。

おとなしく[Enable]を押します。

この画面では、英語読んで下さい。
上の選択肢が”13歳未満対象のゲームです”
下の選択肢が”ちゃうわ!”
らしいですよ。
で、OK-!ってやると

こんな画面になるので必要なデータをImportします。
これで、②は終わり。
【③実際のコードを書く】
はい、ではコードかいてきまひょ。
まずは、公式ページにあるコードをもらってきます。
https://unity3d.com/jp/learn/tutorials/topics/analytics/integrating-unity-iap-your-game-beta
ここのページの真ん中チョイ下あたりにあるコードですね。
ガッツリ持ってきてください。
もちろんクラス名は自分のクラス名に変えてね!
基本はこれでおk!
それでは、自分のアプリのアプリ内課金アイテムを指定してあげましょう。
触ってみたのはこのあたりです。
kProductIDConsumable、kProductIDNonConsumable、kProductIDSubscription
はアイテムのIDです。
kProductNameAppleConsumable、kProductNameAppleNonConsumablekProductNameAppleSubscription、
kProductNameGooglePlayConsumable、kProductNameGooglePlayNonConsumable、kProductNameGooglePlaySubscription
は、GooglePlayやiTuneConnectで作成した、アプリ内課金アイテムのIDです。
で、先ほど4つGooglePlayDeveloperConsoleでアイテムを作成しました。
●100円のアイテム、IDは「com.test.item01」
●500円のアイテム、IDは「com.test.item02」
●1000円のアイテム、IDは「com.test.item03」
●3000円のアイテム、IDは「com.test.item04」
としましょう。
なので、上記のコードの場所をこんな感じで変えてみました。
なんか分かりにくいけど、分かりやすい名前にしてあげてね!
それに伴い、以下箇所も変更。
●InitializePurchasing()メソッドの中です。
ここを、以下にします。
ってやりました。
公式のコードにはないんですが、1行追加の必要があります。
builder.Configure().SetPublicKey(publicKey);
パブリックキーはGooglePlayのDeveloperConsoleで探してください。
あと、今回はまだAppleの方考慮していないんですが、Appleの方もbuilderに追加する場合は、
とか、Apple側とGoogle側で同じアイテムIDの場合は
ってできるみたいですよ。
更に、これに伴いProcessPurchaseメソッドの中も適当に変えてください。
こんな感じですかね。
はい、大体コードはこんな感じ?
あとは、自分の画面で100円購入ボタン押されたら、上記コードの100円のIDならば「consumable_item_01」をBuyProductIDメソッドの引数に渡してあげるって感じでできました。
【④一度GooglePlayの方にアルファかベータテストバージョンとしてあげる】
なんかそのままBuild&Runしたらエラー出てアイテムを取って来れなかったんで、一度Apkをアルファ版かベータ版でGooglePlayにあげ、テスト版としてGooglePlayから落としたら無事成功しました。
なぜかそのあとは、直接Build&Runでもちゃんと課金ができたのですが・・・・
一度テスト版としてやってみましょう!
ということで、ちょっと長くなりましたが、こんな感じでUnity5.3 IAPが使えましたよー って話しでした。
まだまだ触ったばかりなので、間違えているところとかあるかと思います。
何か発見したら知らせて頂けると助かります!
ということで、あでゅ~!!ノシ
1月30日に幕張メッセで行っていたニコニコ闘会議行ってきました!
ニコニコみないので、本編はあんまり興味はなく、デジゲー博SPECIALが目当てです。
[デジゲー博SPECIAL in 闘会議2016]
http://digigame-expo.org/sp2016
こちら、面白かったです。
規模は去年にあったデジゲー博の半分くらい?もっと少なかったかな?くらいでした。
Room6さんのブースでRoom6グッズ詰め合わせを買わせて頂きました!
他にもラビアンさんのブース、ProtoAccelさんのブース、tomeappさんのブースなど、いくつかまわりましたよっと!
はい、では話は変わって、UnityのIAP試しました!
Unity5.3から導入された、アプリ内課金のシステムですね。
今までappCさんのアイテムSTORE使ったり、AssetStoreでアプリ内課金のAssetを買っていた方には朗報ですよね!
ただ…色々調べても英語のサイトばっかりで中々触る機会がありませんでした。
ポケガ2も佳境に入ってきて、そろそろ課金周りをどうにかしないとなと、思っていたのでいじってみました。
結果としては、AndroidでのConsumableのアプリ内課金は無事成功!(なのか?
今回試したのはAndroidのConsumable(消費型)だけなので、リストア周りはコードに書きっぱなしですが、使っていません。あしからず。
IOSでもこのままいくかもしれませんが、それは今週中に試したいと思います。
IAPを使う上での手順を簡単に書くと以下の感じです。
①GooglePlayでアプリ内アイテムを作成し、有効化しておく。
②UnityにてIAPを有効にする。
③実際のコードを書く。
④一度GooglePlayの方にアルファかベータテストバージョンとしてあげる。
では、①から行ってみましょ。
【①GooglePlayでアプリ内アイテムを作成し、有効化しておく。】
まぁ、これは皆さん分かっている通りGooglePlayにてアプリ内課金を作成します。

と、ここで以前登録した時は、管理対象外のアイテム=Consumable(消費型)という項目があったと思ったんですが、気のせいかな・・
と思ったら、去年(2015年)の1月に前のバージョンとなる「In-app Billing Version2」が終了していて、現在は「In-app Billing Version3」になっていました。
Version3で消費型も非消費型も管理対象のアイテムになったようですね。
こちらに書いていました。
http://qiita.com/Night___/items/1ff72d0a926e0ebdf87c
ってことで、まずは管理型のアイテムを作ります。

【②UnityにてIAPを有効にする。】
では次にUnity側でIAPを有効にします。
有効にする方法は、次の通り。
まずは、サービスウィンドウを開きます。

ここに新しいボタンあるので、コレ押してね。
Window⇒Serviceって押してもいいよ!
そうするとこんな画面が出ます。

ProjectIDを選択します。
これで、「Create!!!」

そしたらこんな画面になるので、In-App PurchasingのOFFを押しましょう!
はい、こんな画面になります。

おとなしく[Enable]を押します。

この画面では、英語読んで下さい。
上の選択肢が”13歳未満対象のゲームです”
下の選択肢が”ちゃうわ!”
らしいですよ。
で、OK-!ってやると

こんな画面になるので必要なデータをImportします。
これで、②は終わり。
【③実際のコードを書く】
はい、ではコードかいてきまひょ。
まずは、公式ページにあるコードをもらってきます。
https://unity3d.com/jp/learn/tutorials/topics/analytics/integrating-unity-iap-your-game-beta
ここのページの真ん中チョイ下あたりにあるコードですね。
ガッツリ持ってきてください。
もちろんクラス名は自分のクラス名に変えてね!
基本はこれでおk!
それでは、自分のアプリのアプリ内課金アイテムを指定してあげましょう。
触ってみたのはこのあたりです。
// General handle for the consumable product.
private static string kProductIDConsumable = "consumable";
// General handle for the non-consumable product.
private static string kProductIDNonConsumable = "nonconsumable";
// General handle for the subscription product.
private static string kProductIDSubscription = "subscription";
// Apple App Store identifier for the consumable product.
private static string kProductNameAppleConsumable = "com.unity3d.test.services.purchasing.consumable";
// Apple App Store identifier for the non-consumable product.
private static string kProductNameAppleNonConsumable = "com.unity3d.test.services.purchasing.nonconsumable";
// Apple App Store identifier for the subscription product.
private static string kProductNameAppleSubscription = "com.unity3d.test.services.purchasing.subscription";
// Google Play Store identifier for the consumable product.
private static string kProductNameGooglePlayConsumable = "com.unity3d.test.services.purchasing.consumable";
// Google Play Store identifier for the non-consumable product.
private static string kProductNameGooglePlayNonConsumable = "com.unity3d.test.services.purchasing.nonconsumable";
// Google Play Store identifier for the subscription product.
private static string kProductNameGooglePlaySubscription = "com.unity3d.test.services.purchasing.subscription";
kProductIDConsumable、kProductIDNonConsumable、kProductIDSubscription
はアイテムのIDです。
kProductNameAppleConsumable、kProductNameAppleNonConsumablekProductNameAppleSubscription、
kProductNameGooglePlayConsumable、kProductNameGooglePlayNonConsumable、kProductNameGooglePlaySubscription
は、GooglePlayやiTuneConnectで作成した、アプリ内課金アイテムのIDです。
で、先ほど4つGooglePlayDeveloperConsoleでアイテムを作成しました。
●100円のアイテム、IDは「com.test.item01」
●500円のアイテム、IDは「com.test.item02」
●1000円のアイテム、IDは「com.test.item03」
●3000円のアイテム、IDは「com.test.item04」
としましょう。
なので、上記のコードの場所をこんな感じで変えてみました。
// アイテム01のID.
private static string consumable_item_01 = "item01";
// アイテム02のID.
private static string consumable_item_02 = "item02";
// アイテム03のID.
private static string consumable_item_03 = "item03";
// Apple App Store アイテム01.
private static string product_apple_consumable_item_01 = "apple.com.test.item01";
// Apple App Store アイテム02.
private static string product_apple_consumable_item_02 = "apple.com.test.item02";
// Apple App Store アイテム03.
private static string product_apple_consumable_item_03 = "apple.com.test.item03";
// Google Play Store アイテム01.
private static string product_google_consumable_item_01 = "com.test.item01";
// Google Play Store アイテム02.
private static string product_google_consumable_item_02 = "com.test.item02";
// Google Play Store アイテム03.
private static string product_google_consumable_item_03 = "com.test.item03";
なんか分かりにくいけど、分かりやすい名前にしてあげてね!
それに伴い、以下箇所も変更。
●InitializePurchasing()メソッドの中です。
// Create a builder, first passing in a suite of Unity provided stores.
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
// Add a product to sell / restore by way of its identifier, associating the general identifier with its store-specific identifiers.
builder.AddProduct(kProductIDConsumable, ProductType.Consumable,
new IDs(){{ kProductNameAppleConsumable,AppleAppStore.Name },
{ kProductNameGooglePlayConsumable, GooglePlay.Name },});
builder.AddProduct(kProductIDNonConsumable, ProductType.NonConsumable,
new IDs(){{ kProductNameAppleNonConsumable,AppleAppStore.Name },
{ kProductNameGooglePlayNonConsumable, GooglePlay.Name },});
builder.AddProduct(kProductIDSubscription, ProductType.Subscription,
new IDs(){{ kProductNameAppleSubscription,AppleAppStore.Name },
{ kProductNameGooglePlaySubscription, GooglePlay.Name },});
UnityPurchasing.Initialize(this, builder);
ここを、以下にします。
// Create a builder, first passing in a suite of Unity provided stores.
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.Configure().SetPublicKey(publicKey);
// Add a product to sell / restore by way of its identifier, associating the general identifier with its store-specific identifiers.
builder.AddProduct(consumable_item_01, ProductType.Consumable,
new IDs() { { product_google_consumable_item_01,GooglePlay.Name }, });
builder.AddProduct(consumable_item_02, ProductType.Consumable,
new IDs() { { product_google_consumable_item_02,GooglePlay.Name }, });
builder.AddProduct(consumable_item_03, ProductType.Consumable,
new IDs() { { product_google_consumable_item_03,GooglePlay.Name }, });
builder.AddProduct(consumable_item_04, ProductType.Consumable,
new IDs() { { product_google_consumable_item_04,GooglePlay.Name }, });
UnityPurchasing.Initialize(this, builder);
ってやりました。
公式のコードにはないんですが、1行追加の必要があります。
builder.Configure
パブリックキーはGooglePlayのDeveloperConsoleで探してください。
あと、今回はまだAppleの方考慮していないんですが、Appleの方もbuilderに追加する場合は、
builder.AddProduct(consumable_item_01, ProductType.Consumable,
new IDs() {{ product_apple_consumable_item_01,AppleAppStore.Name },
{ product_google_consumable_item_01, GooglePlay.Name }, });
とか、Apple側とGoogle側で同じアイテムIDの場合は
builder.AddProduct(consumable_item_01, ProductType.Consumable,
new IDs() {{ product_apple_consumable_item_01,AppleAppStore.Name,GooglePlay.Name }, });
ってできるみたいですよ。
更に、これに伴いProcessPurchaseメソッドの中も適当に変えてください。
こんな感じですかね。
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
if(String.Equals(args.purchasedProduct.definition.id, consumable_item_01, StringComparison.Ordinal)) {
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));//If the consumable item has been successfully purchased, add 100 coins to the player's in-game score.
// ここでアイテム1をあげる処理
} else if(String.Equals(args.purchasedProduct.definition.id, consumable_item_02, StringComparison.Ordinal)) {
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
// ここでアイテム2をあげる処理
} else if(String.Equals(args.purchasedProduct.definition.id, consumable_item_03, StringComparison.Ordinal)) {
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
// ここでアイテム3をあげる処理
} else if(String.Equals(args.purchasedProduct.definition.id, consumable_item_04, StringComparison.Ordinal)) {
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
// ここでアイテム4をあげる処理
} else {
Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
}
return PurchaseProcessingResult.Complete;
}
はい、大体コードはこんな感じ?
あとは、自分の画面で100円購入ボタン押されたら、上記コードの100円のIDならば「consumable_item_01」をBuyProductIDメソッドの引数に渡してあげるって感じでできました。
【④一度GooglePlayの方にアルファかベータテストバージョンとしてあげる】
なんかそのままBuild&Runしたらエラー出てアイテムを取って来れなかったんで、一度Apkをアルファ版かベータ版でGooglePlayにあげ、テスト版としてGooglePlayから落としたら無事成功しました。
なぜかそのあとは、直接Build&Runでもちゃんと課金ができたのですが・・・・
一度テスト版としてやってみましょう!
ということで、ちょっと長くなりましたが、こんな感じでUnity5.3 IAPが使えましたよー って話しでした。
まだまだ触ったばかりなので、間違えているところとかあるかと思います。
何か発見したら知らせて頂けると助かります!
ということで、あでゅ~!!ノシ
Category: 開発日記(Unity)
| h o m e |