講演ファイル(コースA):伊藤 周、鎌田 泰行(PDF)

1
Unity サービス実装ワークショップ
2
アジェンダ・準備・プロジェクト紹介
3
事前準備
• Unityインストール
➡ USBの Unite2016Tokyo_TrainingDay_CourseA/Installer/Unity/ にWin(32bit/64bit)とMac用が入っています
• Unityアクティベーション
➡ Unityアカウント作っていない人は、今作ってください(サービスに必要です)
• GitHub のアカウント作成
➡ http://bit.ly/1ULL6LM を参考にアカウント作成してください
• 準備が終わったら、配布したUSBメモリから
「Unite2016Tokyo_TrainingDay_CourseA」フォルダごと自分のPCにコピ
ーしておいてください
4
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう
5
本ワークショップで得られる知見
• 各種Unityサービスの使い方
➡ Cloud Build/Analytics/IAP/Ads・
• 次世代サービスの紹介
➡ Heatmap/Coraborate・
• アプリ内課金やAdsを使ったマネタイズの実践
• サンプルアセットを使ったレベルデザイン
6
本ワークショップで得られない知見
• Unityの初歩的な使い方
• バージョン管理ソフトの使用法
• アプリ内課金のサーバー側の実装方法
7
ご注意
• 途中ついていけない場合は、挙手して近くのスタッフにお気軽にお声か
けください
• 本ワークショップではより深い実装を理解していただくため、iOS/
Android開発に特有の機能も含みます(右上のマーク)
➡ iOS/Androidの開発に興味無い人はそれぞれの時間が多少退屈になるかもしれません
• どうしてもデバイス特有の問題や各ストアで生じる不具合などに対応で
きない場合があります
➡ 最後に時間を取っておりますので、そこでできる限り対応します
8
準備(してきましたか?)
• Unityのインストール
• Unityのアクティベーション
• GitHub のアカウント作成
9
準備を忘れてしまった人のために
• Unityインストール
➡ USBの Installer/Unity/ にWin(32bit/64bit)とMac用が入っています
• Unityアクティベーション
➡ Unityアカウント作っていない人は、今作ってください(サービスに
必要です)
• GitHub のアカウント作成
➡ http://bit.ly/1ULL6LM を参考にアカウント作成してください
10
Unityでプロジェクトを開く
1) USBに入っているフォルダごとデスクト
ップ等にコピー
2) Unite2016Tokyo_TrainingDay_CourseA.zi
p を解凍
3) Unity起動
4) 「OPEN」→解凍後フォルダの中にある、
Unite2016TokyoWS01の中の
Unite2016TokyoWS01プロジェクトを開
く
11
Unity Services設定
①メニューから
Window→Services・
でServiceウィンドウを
開く
②上記画面が出たら、
Sign in でサインイン
画面に行く
出なかったら④に進む
③メールアドレスとパスワードを
入れてSign Inをクリック
12
Unity Services設定
④上記画面が出たら
New link…をクリック
(上記画面が出ない場合は
右上の▼をクリックして
Reloadを押してください)
⑤Select organization を押して
自分のアカウントを選択。
Createをクリック
⑥In-App Purchasingを
クリック
13
Unity Services設定
⑦↑の画面が出るので
Enable をクリック
⑧米COPPA法に基づいて適切な方を選択
今回は13歳以下の子供もプレイする
可能性があるから
上の「This game is directed」を選択
⑨Import をクリックして
Pluginをインポート
14
Unity Services設定
⑩Welcome になっていればOK
「Back to services」 を選択
しばらく経つと、自然にAnalyticsもONになる。
Console にエラーがなくなっていれば成功
15
プロジェクト”UnityChanBallRoll”の解説
• Roll Ball の改良版
https://unity3d.com/jp/learn/tutorials/projects/
roll-ball-tutorial
• 地形タイルが各種パターンがあり、拡張性が高い
• スマホでもWebGLでも動く
• Assets/Example/Scripts/CompleteProject
• 完成版ソースコード
• Assets/Example/Scripts/Workshop
• ワークショップ用ソースコード
• これを改変していく
16
GitHubアカウント登録①(既にある人はスキップ)
• ユーザー名: 唯一無二のID
➡ 例:makoto-unity, warapuri
• メールアドレス: なんでも良い
• パスワード: 忘れない
• 「Sign up for GitHub」クリック
17
GitHubアカウント登録②(既にある人はスキップ)
• Freeのまま、「Finish sign up」クリック
• メールを受けてとって、メールの中のリン
ク先(Verify email address)にジャンプ
18
マスタープロジェクトをFork
①github.com にSign in
②https://github.com/unity3d-jp/
Unite2016TokyoWS01 を開く
③「Fork」 をクリックしてFork
④「Where should we fork this repository?」
と出た場合は、自分のアカウントを指定 → Fork先に移る
19
Unity Cloud Build を登録してみよう
20
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう
21
Unity Cloud Buildとは
• クラウド上で自動でビルドしてくれるサービス
• 無料でも使える(制限あり)
• https://checkout.unity.com/products/cloud-build
• Unity Professional版はCloud Proが12ヶ月無料!
• マルチプラットフォームビルド
• iOS/Android/WebPlayer/WebGL/Mac/Windows/
Linux
22
Unity Cloud Buildとは
• WebPlayer、WebGLはシェア可能
• MacじゃなくてもWindowsでもiOS開発が可能(要:
iOS developer program登録)
• GitHub等のリポジトリを更新すれば、即ビルドが始
まる
• AssetBundle のビルドができる
• Unit Test の実行ができる
23
Let’s try Cloud Build !
①メニューからWindow→Services を選択
②Go to Dashboard をクリック
24
Let’s try Cloud Build !
④ 「Enable Unity Cloud Build」をクリック
⑤ 「First, let's add some SCM information」で
「Do it!」をクリック
⑥ GitHubのリポジトリURL(先ほどフォークし
た)を「サーバーURL」に代入(コピペ可)
⑦ 「ソース管理タイプ」を「Git」を選択して、
「Next:Access→」をクリック
25
Let’s try Cloud Build !
⑦ビルドさせる出力形式でWebPlayer
を選択
⑧「Select Branch」をクリックして、
「master」 を選択(Unity Versionは
なんでもいいが、Unity5.3.4p1とか)
⑨「Next: Build→」をクリックして、
ビルド開始!
26
Unity Cloud Build
iOSビルド(要iOS開発者登録)
• 以降は既にiOS開発者登録しており、一度でもiOS端末でビルドした経験がある方向けです
27
iTunesでiOSのUDIDを確認
①iTunesを立ち上げる
②iOS端末をつなげる
③iOS端末マークをクリック
④何回かクリックするとUDIDが表示されるの
で、右クリックメニューで「コピー」を選択
28
iOS Developer Center で Device登録
①iOS Developer program ページをSafariで
開く
②「メンバーセンター」をクリック
③開発者登録したApple IDでサインイン
④「Certificates, Identifiers & Profiles」をク
リック
29
iOS Developer Center で Device登録
⑤ Devices → ALL
⑥ 「+」ボタンをクリック(既に端末の登録が
あれば必要ない)
⑦ Register Device のName にはわかりやすい
iOS端末名(例:Makoto’s iPhone6)
⑧ UDID にはiTunes で確認したUDIDを入れる
30
Xcodeで iOS Distribution のCertificate発行
①Xcode を立ち上げて、メニューの Xcode →
Preference
②Account → 該当のAppleID → View Details…
③iOS Distribution の右がCreateがあったらクリ
ックして生成
31
iOS App IDの生成
① Identifiers → ・App IDs
② 「+」ボタンをクリック
③ App ID Descriptionにわかりやすい名前(英語)
④ App ID Suffix は Explicit App ID を選ぶ(この後
IAPも使うので)
⑤ Bundle ID は適当な逆ドメイン名風に(例:
com.warapuri.rollball)
⑥ Continue で、In-App Purchase がonになってる
ことを確認し、Register
32
Provisioning Profileの生成
① Provisioning Profiles の All を選択
② +を選択
③ Distribution の Ad Hoc を選択して、一番下のContinueボタンを
クリック
④ Select App ID で先ほど作った App IDを選択して、Continue
⑤ Certificatesを選択して Continue
⑥ 出力先デバイスを選択して Continue
⑦ Profile Nameに適当な名前をつけて Continue (例:
UnityChan Roll Ball Adhoc distribution)
⑧ Download ボタンを押して、ダウンロードする
33
p12 Fileを取得する
① Xcode → Preference
② Accounts → Apple IDs → View Details…
③ iOS Distributionを選択して右クリックからExport…を
選択
④ パスワードを決めてSave。ファイル名はなんでもいい
(例:Cert) → p12ファイルとして保存される
34
iOSでCloud Build設定
① 再度Cloud Buildページに行って、Config タブで、
Setup New Target ボタンをクリック
② ビルドさせる出力形式でiOSを選択
③ 先ほどと同様、Select Branch をmaster にして、
「Next: Build →」クリック
35
iOSでCloud Build設定
④ BundleID は先ほど決めた逆ドメイン名風のID
⑤ Add new provisioning credentials を選択
⑥ Cert名を適当に(例:My devices)
⑦ provisioning ファイルを指定
⑧ p12 ファイルを指定
⑨ パスワードは先ほどp12を作ったときのもの
⑩ Next: Buildをクリック
36
出来上がりまでしばしお待ちください
37
【注意】ハマリポイント!
• メールに貼られているリンクは必ずSafariで開くこと
• インストールしようとすると、"Your device is not provisioned for this
build.” と表示されてインストールできない場合がある
• でもUDIDもprovisioningもp12も間違っていない(何度もやって確認して
いる)
• 調べてみると、どうやら利用可能DeviceのUDIDグループを作り直したこ
とに起因しているらしい(該当のUDIDは変更していなくても)
• 解決法は iOSで https://build.cloud.unity3d.com/device/ をアクセスして、
Install 横の▼から「Reset provisioned device」を選択
• 以降は Install 可能になるはず
38
Unity Cloud Build
Androidビルド
• 以降は一度でもAndroid端末でビルドした経験がある方向けです
39
Unityで署名済み証明書とAPKを作る
①Unityのメニューから、
②Android のタブで、
③Aliasは適当な名前(後で使うので覚えておく)
Keystore passwordにパスワード
Create New Keystoreに✔
Browse Keystoreを押してKeystoreの保存先を指定。 Confirm passwordにも同じパスワードを
Keystore passwordとConfirm passwordに
以降は↑を参考に適当に代入
同じパスワード。
Create KeyボタンでKeystoreファイルを保存
Edit→Project Settings→Player、 Publishing Settings の項目で
を選択して、
PlayerSettingsを表示
最後にAliasのCreate a new keyを選択。
40
Unityで署名済み証明書とAPKを作る
④Use Existing Keystoreに✔
Browse Keystoreに
保存したKeystoreファイルを選択。
Aliasは③で付けた名前を選択
Password は③の同じパスワード
⑤同じくPlayer Settingsの
Other Settings を選択して
Bundle Identifier に先ほどの
iOSと同じものを入れる
(混乱をさけるため)
⑥Unityのメニューから、 ⑦Buildボタンでビルド。
File→Build Settingsで (生成されたapkファイルは
後のIAPで使う)
Build Settingsを表示
41
AndroidでCloud Build設定
①Cloud Buildページに行って
Config → Setup New Target
②ビルドさせる出力形式で
Androidを選択
③Select Branchでmasterを選択。
Next Credentials で次のページへ
42
AndroidでCloud Build設定
④ • Bundle IDはiOSと同じ(が混乱しない)
• Choose Credentials は「Add new provisioning credentials」
を選択する。
• Nameは適当に(例:Release Keystore)
• Keystore Fileは先ほどのUnityで作った署名済み証明書ファイ
ルを指定
• Key Alias は先ほどUnityで作ったとき指定したAlias名
• Keystore Password は先ほどUnityで作ったときのパスワード
• Key Password は同じ(が混乱しない)
• 最後にNext Build→でビルドスタート
43
出来上がりまでしばしお待ちください
44
Unity Analytics を組み込んでみよう
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう
Unity Analytics とは
• アプリのユーザー動向分析サービス
• ≒Google Analytics (オイ
• Unity に組み込んである(5.2以降)
• 無料(Unity Personal で利用できる)
• 1プロジェクト、1000 pointまで
拙アプリ「VR Jump Tour」のAnalyticsを見る
• iOS/Android用 実写VR アプリ
• 無料
• 総ダウンロード数約 30,000
• もちろん Made with Unity
「VR Jump Tour」のAnalytics
• 日本人は軍艦島が人気
• ロシアには何故かHiyoshiが人気
• DAU徐々に下がってる
Let’s try Unity Analytics!
Analyticsをセットアップする
①Analytics をOFFから
ONにする
②ダッシュボード(Web)に行く
③INTEGRATION→Unity5.2 onward
Analyticsをセットアップする
③Play To Validate まで行って…
④Unityでプレイしてみると
⑤たった今更新された
カスタムイベント
• カスタムイベントとは、ユーザーが任意のタイミングで知りたい
情報をスクリプトで仕込むもの。
• 例:レベルの達成、シーンの変更、ストア入店、ゲームオブジェクトとのイ
ンタラクションなど
• Unityが集める基本情報(端末、場所、ユニークユーザーか等)以
外は全てカスタムイベントを作る必要がある
• リミットはあるが、あまり気にしなくてもいい
カスタムイベント詳細
• customEventName:カスタムイベント名。名前にプ
レフィックス「unity」を含むことは不可。予約語
• eventData: Dictionary型。パラメータ名のKey+値
の組。値は以下のパターン
• Boolean (true/false)
• 文字列 (character)
• 数字 (int、float など)
• 数字は平均、総数、合計。文字列とBooleanは総数
• VR Jump Tourの円グラフはシーン名(文字列)だ
からできた。シーンIDではできない
// Reference the Collections Generic namespace
using System.Collections.Generic;
int totalPotions = 5;
int totalCoins = 100;
string weaponID = "Weapon_102";
Analytics.CustomEvent("gameOver", new
Dictionary<string, object>
{
{ "potions", totalPotions },
{ "coins", totalCoins },
{ "activeWeapon", weaponID }
});
Analytics Point の計算について
• 1000point までOK
• Analytics Point の計算法
• パラメータ無し→1ポイント
• 数値パラメータだけ→(数値個数)×1ポイント
• 非数値パラメータだけ→(取りうる値の個数)×1ポイント
• 例:キャラ選択した総数を知りたいのなら、「0(=男性)」「1(=女性)」にするべきではなく、「MALE」
「FEMALE」にするべき。また任意の文字列(名前等)は避けた方がいい
• 非数値&数値パラメータ→上記二つの合算
• とはいえ、あまり気にしなくても大丈夫
カスタムイベントを仕込んでみよう
• シーン Example/Scenes/Workshop01 を開く
• Example/Scripts/Workshop/GoalChecker.cs を
開く
• Example/Scripts/CompleteProject/
GoalChecker.cs を参考に
• 最初の// TODO:のところに 以下を仕込む
「using UnityEngine.Analytics;」
• 次の// TODO: のところに 以下を仕込む
「Analytics.CustomEvent( ∼」
仕込んだカスタムイベントを確認してみよう
③Advanced Integration→
CUSTOM EVENTS
④Unityでプレイしてみると
⑤たった今更新された
オリジナルのカスタムイベントを仕込んで
みよう
• キャラ選択(CharaSelectController.cs)
【注意】数値型ではなく文字列に
• 死んだ (GameOverController.cs)
• リトライ (GameOverController.cs)
• ちゃんとDashboard で更新されています
か?
Unity Analyticsの主要機能をみてみよう
METRIC MONITOR
メトリックモニター
概要把握画面
• Unityが基本情報を元に集計した一般情報
• DAU(日ごとのアクティブユーザー)
• MAU(月ごとのアクティブユーザー)
• REVENUE(利益)
• Sticky Factor
• DAU÷MAU=継続率
DATA EXPLORER
データエクスプローラー
ユーザーが独自に作ったカスタムイベント集計画面
• Add Custom Event で追加
• Custom Event でカスタムイベント名を指定
• Segment で対象とするユーザーを指定
• Parameter でグラフ化したいパラメータを指定
• Calculation で集計方法を指定
• 円グラフアイコンで円グラフ表示(ただし非数
値パラメータのみ)
FUNNEL ANALYZER
ファネルアナライザー
• 継続率を集計する画面
• 「チュートリアルのどこでゲームやめたか?」
• 「何がきっかけでやめてしまったのか?」
• 1ヶ月の継続率の20%ぐらいが目標
• http://www.slideshare.net/hiromasaiwasaki/
f2p-54671169
SEGMENT BUILDER
セグメントビルダー
• 自分独自のセグメント作成
• 「日本の」「iOS」ユーザー
• 「一万円以上課金した」ユーザー
• 「チュートリアル突破した」ユーザー
• 「レベル>30」ユーザー
• 「前回1分以上プレイした」ユーザー
よくある質問
• Q. 集計にどのぐらいかかる?
• A. 4時間ほどかかります
• Q. カスタムイベントはどこにおけばいい?
• A. レベルアップや課金等の重要なタイミングがベストです
• Q. 集計前のRAWデータを取得したい
• A. 限定機能です。http://info.unity3d.com/2015-10-9HeatmapsSign-Up.html に登録を
• Q. Analytics Point が1000を超えたらどうなる?
• A. それ以降のカスタムポイントを取得できません。ただし各カスタムイベントをオン/オフはWeb
から随時変更できます
Tips
• Event名には一貫性を持とう(LevelStart,LevelCompleted)
• Event名には「起こったこと」をしよう(⭕ LevelCompleted ❌ Level)
• Event名は大文字を認識できるが、パラメータ名は小文字のみ(⭕ ️ level_id ❌ LevelID)
• カテゴリーで分けるなら、数字を最初にしない( ⭕ Level0 ❌ 0Level)
• ガベコレを気をつけるならDictionary型のメンバ変数を持とう
• Analyticsに関するコードはゲーム部分と切り離しておこう
Unity InAppPurchase を組み込んでみよう
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう
Unity In-App Purchase (IAP) とは
• Unity Analytics に付属する機能
• アプリ内課金を簡単に組み込める
• マルチプラットフォーム
• Google Play / iOS App Store / Mac App
Store / Windows Store / その他
• コード共通
• ネイティブプラグインを書かなくてOK
IAPをサンプルプロジェクトに組み込んでみよう
• 仕様
• クマは購入したら利用できるようにする
• 一度購入したらそれ以降は利用できる(非消費型)
• 購入するまでは利用不可
• コインは購入可能
• 買うとプレイが終わっても存続する(消費型)
• 実装方法
• クマ利用権やコインはPlayerPrefs で記録しておく
Let’s try Unity IAP!
IAPをセットアップする
①In-App Purchase を有効にする
②オンにして、Importする
③Plugins/UnityPurchasingが
あればOK
購入ボタンと購入APIを紐づける
①Systemを選択→右クリック→
②IAPManager に
Create Emptyで空オブジェクト。
Example/Scripts/Workshop/Purchaser.cs
名前を「IAPManager」に変更
(Example/Scripts/Complete/Purchaser.csではない)
をD&D
③シーンの中で”border_shop”を検索して
アクティブにして見えるようにする
購入ボタンと購入APIを紐づける
④シーンの中で”Item1buy_Button”を検索
⑤検索ウィンドウの×で検索解除
Buttonコンポーネントにある
④で作った項目に①で作った
OnClickの+を押して項目追加。
IAPManager をD&D
⑥No Function をクリックして
Purchase ▶︎ BuyConsumable()
を選択
購入ボタンと購入APIを紐づける
⑦シーンの中で”Item2buy_Button”を検索
⑧検索ウィンドウの×で検索解除
Buttonコンポーネントにある
⑦で作った項目に①で作った
OnClickの+を押して項目追加。
IAPManager をD&D
⑨No Function をクリックして
Purchase ▶︎ BuyNonConsumable()
を選択
購入ボタンと購入APIを紐づける
⑩シーンの中で”border_shop”を検索して
非アクティブに戻す
Purchase.csの購入部分に効果を組み込もう
• Example/Scripts/Workshop/Purchase.cs を開く
• Example/Scripts/CompleteProject/Purchase.csを参考
に
• 最初の// TODO:のところに 以下を入れる(コピペ可)
PlayerPrefs.SetInt("CoinNum",
PlayerPrefs.GetInt("CoinNum") + 100);
GameObject.Find(“CoinNumUI").
GetComponent<ScoreManager>().UpdateCoin();
• 次の// TODO: のところに 以下を入れる(コピペ可)
PlayerPrefs.SetInt("NewCharaUnlocked", 1);
CharaSelector.csに効果を反映させよう
• 購入したキャラを利用可能・不可を設定する
• Example/Scripts/Workshop/CharaSelector.cs を開く
• Example/Scripts/CompleteProject/CharaSelector.csを
参考に
• 最初の// TODO:のところに 以下を入れる(コピペ可)
if (PlayerPrefs.GetInt("NewCharaUnlocked") == 0)
{
newOneButton.interactable = false;
}
else
{
newOneButton.interactable = true;
}
Unity IAPの課金プロセスを紐解く
課金部分Purchase.cs を紐解く
• InitializePurchasing
• Awakeで自動で行われ、各ストアでの商品IDと共通商品IDを紐付けを行っている。
• ストアが違ってもゲーム内商品が同じであれば、同じIDの方が混乱がなくていい。
• BuyConsumable、BuyNonConsumable、BuySubscription
• ストア別に購入アイテムを別にしたりしていないことに注目
• BuyProductID
• try~catch で購入シーケンスでの例外をキャッチ
• m_StoreController.InitiatePurchase で、デバイスの購入ダイアログに飛ぶ
課金部分Purchase.cs を紐解く
• RestorePurchases
• アプリを再インストールした際に、昔買った商品をリストアする処理
• AppStore は明示的にアプリ側で復活させる必要がある
• OnInitialized
• 初期化がうまくいけば勝手に呼び出される関数
• 全体の購入システム(m_StoreController) と、ストア特有のサブシステム
(m_StoreExtensionProvider) のインスタンス化
• ProcessPurchase
• ストアで課金が完了した段階で、課金によるゲームへの効果を処理するところ
AppStore の課金アイテムを
実際に追加してみよう
AppStore に課金アイテムを登録
①iTunes Connect へ行って
②Bundle IDはCloud Buildの
③今作った新しいアプリを選択し、
新しいAppを作る
際に、作ったものを代入。
機能→App 内課金→+を選択。
その他の項目は適当に
AppStore に課金アイテムを登録
com.warapuri.unitychanrollball.coin100
④消費型を選択
⑤参照名は公開されないので適当に
製品IDは逆ドメイン名でユニークID。
(例:com.warapuri.unitychanrollball.coin100)
⑥ 価格も設定
AppStore に課金アイテムを登録
⑦言語を追加を設定。課金ポップアップで
⑧スクリーンショットを選択。
⑨Saveを押して保存すると、
表示される内容なので、慎重に。
配布USBに「Shop.png」が
登録される
あるので、利用してください
Sandboxで試してみる
①ユーザーと役割→Sandboxテスター
②テスターとして登録
③テストするiOS端末で
→テスター+ボタンでテスターを追加
makoto+tester01@gmail.com
という感じで「+」を使うと無駄に
設定→iTunes & App Store
メールアカウント作らなくて便利
一旦サインアウトする
→Apple IDを選択し、
Sandboxで試してみる
“com.warapuri.unitychanrollball.coin100”;
④Purchase.cs の kProductNameAppleConsumable の文字列部分を
⑤アプリを立ち上げて、
先ほどの製品IDに変更する
iOS端末で購入しようとすると、
[Environment: Sandbox]
と表示されていれば成功
Google Play の課金アイテムを
実際に追加してみよう
Google Play で新しいアプリを登録
APK
①Google Play で
②タイトルを適当に入れて
③アルファ版テストを選択
アイコン→
APKをアップロードを選択
APKファイルをアップロードを選択
新しいアプリを追加
(Cloud Buildの際に作ったAPK)
Google Play で新しいアプリを登録
APK
④「クローズドアルファテスト」を
⑤Create List でテスターリストの作成
⑥作ったテスターリストに
選択
リスト名は適当に。
有効に✔を入れる
メールアドレスは自分の
Google アカウントを入れてください
Google Play で新しいアプリを登録
ストアの掲載情報
①ストアの掲載情報を選択
②簡単な説明と詳細な説明をそこそこちゃんと記載する。
(適当に書いたらなりすましに誤認されました)
Google Play で新しいアプリを登録
ストアの掲載情報
③配布したUSBの中に「IAP」フォルダの中に画像を利用
④アプリのタイプをゲーム。
スナップショットに2枚以上、
カテゴリをアーケード。
高解像度アイコン、宣伝用画像をそれぞれ上記のようにD&D
コンテンツレーティングを全ユーザー対象
アップロード
プライバシーポリシーは「今回は∼」に✔
Google Play で新しいアプリを登録
コンテンツのレーティング
①コンテンツのレーティングを選択
②画面に従ってレーティングを設定
Google Play で新しいアプリを登録
価格と販売/配布地域
①価格と販売/配布地域を選択
②アプリの価格は無料。
③同意事項に全て✔
全ての国を選択。
一番上の「ドラフトを保存」をクリック
Google Play で新しいアプリを登録
アプリ内アイテム
com.warapuri.unitychanrollball.coin100
①アプリ内アイテムを選択
②管理対象のアイテムを選択
③タイトル、説明は公開される情報なので
+新しいアイテムを追加を選択
アイテムIDには逆ドメイン
ちゃんと記入。
(アイテムIDは後ほど使うので忘れずに)
デフォルトの価格を記入後、価格を
次へを選択 自動換算ボタンで各国の値段を算出。
最後に右上の「無効」を「有効」に
Google Play で新しいアプリを登録
アプリ内アイテム
“com.warapuri.unitychanrollball.coin100”;
④Purchase.cs の kProductNameGooglePlayConsumable の文字列部分を
⑤アプリを立ち上げて、
先ほどのアイテムIDに変更する
Android端末で購入しようとすると、
「これはテスト用の注文です」
と表示されていれば成功
トラブルシューティング
右のようなエラーが出ている場合の考
えられる原因
1) アイテム内アイテムを「有効」にしていない
2) アイテムIDが違う
3) テスターとGoogle Playアカウントが違う
対処法:設定→アプリ→Google Playストア→
ストレージ→データ消去
4) 反映されるまで時間がまだ立っていない
トラブルシューティング
それでもエラーが治らない場合
1) アプリのステータスが「公開中」まで待つ
2) USBからインストールではなく、APKアップロ
ード→Google Playからダウンロードで試して
みる
3) Androidデバイスを再起動してみる
4) 一回寝て、翌日もう一回チャレンジする
注意
• PlayerPrefsで商品の反映をさせていたが、本来はNG
• 簡単に改造されてしまう
• サーバー側で管理しローカル側では一切情報を保持しない
IAP、もう少し深く。
レシート検証
• http://docs.unity3d.com/ja/current/Manual/
UnityIAPValidatingReceipts.html
• 購入時にストアからくるレシートデータをローカルで確認する
• Google Play 公開キー(要設定)
• Apple のルート証明書(自動設定)
• 購入後のシーケンスなので、アプリケーション側でUIでユーザー
に知らせる必要がある
レシート検証
①Window→Unity IAP→
②Google Play Developer Consoleで
③「IAP Obfuscator」の項目に
Receipt Validation Obfuscatorを
サービスとAPIを選択し、
ペーストして、Generate IAP∼を
選択して、「IAP Obfuscator」を
「このアプリのライセンス キー」の
クリックして、コード生成する。
表示
部分を丸々コピーする
レシート検証
public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)
{
// Unity IAP's validation logic is only included on these platforms.
#if UNITY_ANDROID || UNITY_IOS || UNITY_STANDALONE_OSX
// Prepare the validator with the secrets we prepared in the Editor
// obfuscation window.
var validator = new CrossPlatformValidator(GooglePlayTangle.Data(),
AppleTangle.Data(), Application.bundleIdentifier);
try {
// On Google Play, result will have a single product Id.
// On Apple stores receipts contain multiple products.
var result = validator.Validate(e.purchasedProduct.receipt);
Debug.Log("Receipt is valid. Contents:");
foreach (IPurchaseReceipt productReceipt in result) {
Debug.Log(productReceipt.productID);
Debug.Log(productReceipt.purchaseDate);
Debug.Log(productReceipt.transactionID);
}
// Unlock the appropriate content here.
} catch (IAPSecurityException) {
Debug.Log("Invalid receipt, not unlocking content");
}
#endif
return PurchaseProcessingResult.Complete;
}
マルチプラットフォーム用
確認クラス
レシート確認
問題なければ、ここで
購入したことに
問題があればここで、
買えないことをユーザーに
知らせる必要がある
Unity Ads
Unity Ads Overview
• 動画アドネットワーク
• プラットフォーム:iOS / Android
• 15~30秒程度の全画面動画
• Unity 5.2 からエディタに完全統合、SDK不要
• ゲームのデザインを邪魔しない
• 日本でも一日に数百ドル稼ぐデベロッパーが複数
開発支援から成功支援へ
開発者にとっての「成功」とは
2 : 98
The Swrve Monetization Report 2016
https://www.swrve.com/landing/swrve-monetization-report-2016
課金ユーザー
1.9%
無課金ユーザー
98.1%
The Swrve Monetization Report 2016
https://www.swrve.com/landing/swrve-monetization-report-2016
マネタイズできているユーザー
1.9%
マネタイズできていないユーザー
98.1%
The Swrve Monetization Report 2016
https://www.swrve.com/landing/swrve-monetization-report-2016
100%
マネタイズできているユーザー
すべてのプレイヤーをマネタイズする
次の開発へつなげる
ゲームへの集客へつなげる
Unity Ads をゲームに導入してみる
Unity Ads の機能をオンにする
• Services ウィンドウから Unity Ads の機能
をオンにする
• UnityEngine.Advertisements が使えるよう
になります
• [Advanced] の中にiOS, Androidそれぞれの
Game IDが表示されます
UnityAdsController をDLしてインポート
• http://bit.ly/unityadscontroller
• 今日は USB の中に入ってます
• Unity Ads をさらに簡単に導入するための
スクリプトと Prefab
プレハブ(UnityAdsController.prefab)を
シーンにドラッグ&ドロップ
• /UnityAdsController/Prefab/
UnityAdsController.prefab
プレハブ(UnityAdsController.prefab)の
Game ID と Zone ID を設定する
Game ID ってなに?
• Unity Ads内でゲームアプリを識別するた
めの固有のID
• プラットフォームごとに発行される
Zone ID(Placement)ってなに?
• いわゆる広告枠
• デフォルトで2つ作成されている
• video
• rewardedVideo
• 自分で増やせる
AD_Button に広告表示の関数を割り当てる
• Canvas > border_gameover > AD_Button
のOnClickから、UnityAdsControllerの中の
ShowUnityAds()を呼ぶように設定する
広告表示完了時のコールバックを設定する
• UnityAdsController の中の OnFinished
Callback から、GameOverController の中
の RetryWithEasyMode() を呼ぶように設
定する
• ここはゲームの内容によって変更できる余
地がある
• たとえば
• その場からコンティニュー
• ボーナスコイン など
広告表示完了時にボーナスコインを付与する
• サンプルコード RewardCoin.cs
• bit.ly/rewardcoinsample
• Zip をダウンロードして Unity へ
インポート
• GameOverController にアタッチ
• UnityAdsController の OnFinished
Callback で呼び出す関数を変更する
UnityAdsController(Script)の解説
Unity Ads のダッシュボードを見てみる
ダッシュボードへアクセス
Services ウィンドウ右上の
「Go to Dashboard」
あるいは
https://dashboard.unityads.unity3d.com/
へアクセス
Organizationの切り替え
Project 一覧の表示
テスト端末の一覧表示・登録
API Key の取得・再生成
連絡先情報
請求関連
請求関連
デベロッパーID
ダッシュボード:プロジェクト設定
Platform 一覧
レポート
プロジェクトID, COPPAの設定
導入方法のヘルプ
(Game IDの表示)
ダッシュボード:プラットフォーム設定
広告枠の設定
広告フィルタリング(除外)の設定
動画の向き、テストモードの設定
プラットフォーム設定の表示
(Game ID, Store ID)
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう
Unity Cloud Build の結果を見てみよう
• WebPlayerビルド結果の「Play」ボタンを
クリック
• 「Share」ボタンで一般公開され、誰でも
遊べるようになる
Unity Cloud Buildの
ちょっと進んだ使い方
Advanced Settings
高度な設定
• Scripting Define Synbols
➡ 「#IF MY_DEFINE_DEBUG」とか
• Pre-Export Method Name
➡ ビルド前に呼び出すstatic関数
➡ ライトマップのベイクとか
• Post-Export Method Name
➡ ビルド後に呼び出すstatic関数
• Scene List
➡ BuildSettings とは違うシーン群をビルドしたい場
合設定
Cloud BuildでAssetBundleビルド
• AssetBundle をビルドが可能
• StreamingAssets 以下にコピーして利用ができる
• ローカルに持ってくるのはダウンロードして、IPAを解
凍して、 StreamingAssets以下にある
Cloud BuildでAssetBundleビルド
①UnityエディタでAssetBundle名を
設定しておく
②Cloud Buildページに行って
Configタブを選択
ターゲット(例:Defaul iOS)の
→Show Asset Bundle Options
→Edit Asset Bundle Options
③Build Asset Bundleに✔
Next Save→を選択して
再度ビルドすれば
AssetBundle が生成される
Cloud BuildでUnitTest
• 実は UnityはUnitTest ができる
• UnitTest とはテストフレームワークで、自動で不具合をチェック
してくれる仕組み
• 作っておいたテストをCloud Buildで実行が可能
• テストログも取得可能
Cloud BuildでUnitTest
①こんな↑感じのテストを
Editorスクリプトで作っておく
②Cloud Buildページに行って
Configタブを選択
ターゲット(例:Defaul iOS)の
→Show Test Options
→Edit Test Options
③Enabledに✔
Next Save→を選択して
再度ビルドすれば
ビルド後にテストが走る
UnityCloudBuildManifest.json
• ビルド時にResources以下に出力され、ランタイムで
JSONファイルとして読むことができる
• Assets/Scripts/CompleteProject/CloudBuildVersion.cs
• 得られる情報
• ビルドターゲット(Android/iOS等)
• BuildNumber
• ビルド完了の時間(UTC)
• Unityのバージョン
その他Unityサービスの紹介
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう
Unity Heatmaps
Unity Heatmaps
• Analytics の1機能
• プレイヤーの位置情報等のビッグデータを
集積してビジュアライズしてくれる
• 利点
• ユーザー動向分析
• どこでよく死ぬのか?
• どういうパターンが好まれるのか?
Heatmap事例 3Dゲーム
Heatmap事例 2Dゲーム
Heatmap事例 VRゲーム
demo
Unity Game Performance(alpha)
Unity Game Performance
• クラッシュレポート
• クラッシュ時のログをレポーテ
ィングしてくれる
• 使い方
• UnityCrashLog.unitypackage
をインポート
• CrashReporting.Init(“UPID");
• デメリットなし
demo
Let’s try Game Performance
Unity Collaborate
demo
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう
One Step Effects 概要
「Unityって絵がショボくない?」
「Unityで作るとなんかグラフ
ィックがショボくならない?」
「他のゲームエンジンの方が綺
麗じゃない?」
「Unityのグラフィック機能弱
いんじゃない?」
大きな誤解
• 「Adam」
• https://www.youtube.com/watch?
v=44M7JsKqwow
• Unityは積み上げ式
• 最初はシンプル
• 自分で必要なものを追加していく
• 綺麗なグラフィックはそれなりの手
間が必要
「だけど、何をどうしたらいいの?」
• 綺麗にするためには、多くの要素がある
• ポストエフェクト
• ライティング(ライトマップ)
• テクスチャ
• それぞれに設定項目がたくさんある
• 例:Bloom
• →Threshold(閾値)、Exposure(露
光)、Radius(半径)、Intensity(強度)
そこで
「One Step Effects」
の出番です
One Step Effects 概要
• https://github.com/makoto-unity/
OneStepEffects
• 1クリックで綺麗なエフェクトやライティ
ングを設定してくれるUnityエディタ拡張
• 複雑な設定項目をいろいろ調整する必要が
ない
• Editorスクリプトなので、自分でカスタマ
イズ可能
使い方(初級編)
使い方
1.メニューから「Window → One Step
Effects」
2.「Apply」ボタン
以上!
使い方(中級編)
詳細設定情報その1
• Root Object: ライトマップを適応させるオブジェクトのルート
• Noneならば、Rendererがついているオブジェクト全て
• Camera Object: イメージエフェクトが適応させたいカメラ
• Noneならば、Main Camera
• Light Object: 調整させたいライト
• Noneならば、Directional Light を検索したライト
• Skybox: 貼るスカイボックスのマテリアル
• Noneならば、Skybox を検索してあればそれを使う
詳細設定情報その2
• Lighting settings:Precomputed Realtime GIを適応
• Ambient Intensity: 環境光の明るさ
• Reflection Intensity: 反射光の明るさ
• Realtime Resolution: ライトマップの解像度。地形が巨大な場
合は0.1とか小さい値にした方が無難
• DirectLight Intensity: 太陽光の明るさ。弱くした方がいい
• Create Normal map:Normalテクスチャがない場合は、元のテク
スチャをコピーしてNormalテクスチャに変換して適応
• Normal scale: ノーマルマップの効き具合。あまり激しくしない
方がいい
詳細設定情報その3
• Apply SSAO
• SSAO(部屋の角等の陰影)の適応
• Apply SSR
• SSR(反射表現)の適応
• Apply Bloom
• Bloom(光があふれる演出)の適応
• Apply AA
• Antialias(ジャギーを防ぐ) の適応
何はともあれ
使ってみましょう
アジェンダ
1) Unity Cloud Build を登録してみよう
2) Unity Analytics を組み込んでみよう
3) Unity InAppPurchase を組み込んでみよう
4) Unity Ads を組み込んでみよう
5) Unity Cloud Build の結果を見てみよう
6) その他サービスいろいろの紹介
7) One Step Effects の紹介
8) 自分のプロジェクトでUnityサービスを始めてみよう